gpt4 book ai didi

c# - 使用 SSIS 脚本任务读取 Excel 单元格值

转载 作者:行者123 更新时间:2023-11-30 15:36:34 30 4
gpt4 key购买 nike

我正在尝试通过 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 语句或任何包含相同行号的语句得到一个 bool 值,如下所示:

string strSQL = "Select * From [" + tabName + "F4:H4]";

调试输出:

row.ItemArray[2]    false   object {bool}

但是当我像这样设置一个不同的范围时:

string strSQL = "Select * From [" + tabName + "F1:H4]";

我失去了对 bool 值的识别:

row.ItemArray[2]   "FALSE"  object {string}

我更愿意将 bool 值用于其他处理任务。

除了读取 B2 值之外,我该如何解决这个问题?

最佳答案

您的连接字符串指定了 IMEX=1,它告诉驱动程序将混合数据类型视为文本。 (请参阅 MSDN 文章 Excel Connection Manager 的“使用注意事项”部分。)

因此,当您指定单行时

string strSQL = "Select * From [" + tabName + "F4:H4]";

第三列只有一种可能的数据类型,驱动程序能够正确地推断出它。但是,当您指定多行时

string strSQL = "Select * From [" + tabName + "F1:H4]";

并且 H1:H4 范围内的任何值不是bool,驱动程序将该列中的所有值转换为字符串

假设您实际上在 H 列中有混合数据类型并且只关心两个特定单元格中的值,最简单的解决方案是分别查询每个单元格。参见 Import a single Excel cell into SSIS有关如何做到这一点的一些想法。

关于c# - 使用 SSIS 脚本任务读取 Excel 单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13627337/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com