【发布时间】:2012-11-17 14:50:27
【问题描述】:
我正在尝试通过 SSIS ScriptTask 读取 Excel 文件,以检查该工作表中的某些单元格值。
在代码示例中,您可以看到 strSQL 设置为“H4:H4”以仅读取一个单元格。这个单元格只能有一个真值或假值。 因为我还需要检查 B1 中的某个字符串值,所以我想扩展这个版本。
string filePath = "c:\\test\\testBoolean.XLSX";
string tabName = "testSheet$";
string strSQL = "Select * From [" + tabName + "H4:H4]";
String strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ filePath + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\";";
OleDbConnection cn = new OleDbConnection(strCn);
int iCnt = 0;
OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSQL, cn);
DataSet ds = new DataSet();
objAdapter.Fill(ds, tabName);
DataTable dt = ds.Tables[tabName];
foreach (DataRow row in dt.Rows)
{
iCnt = iCnt + 1;
// some processing....
}
我不明白为什么我使用上面的 strSQL 语句或任何包含相同行号的语句得到一个布尔值,如下所示:
string strSQL = "Select * From [" + tabName + "F4:H4]";
调试输出:
row.ItemArray[2] false object {bool}
但是当我设置一个不同的范围时:
string strSQL = "Select * From [" + tabName + "F1:H4]";
我失去了对布尔值的识别:
row.ItemArray[2] "FALSE" object {string}
我更愿意将布尔值用于其他处理任务。
除了读取 B2 值之外,我该如何解决这个问题?
【问题讨论】: