【发布时间】:2011-04-21 01:07:18
【问题描述】:
我有一个 Excel 2007 工作簿,其中包含我使用 ADO.NET 导入到 DataTable 对象的数据表。
通过一些实验,我设法找到了两种不同的方法来指示 ADO.NET 应将单元格视为“null”:
- 单元格完全空白。
- 单元格包含
#N/A。
不幸的是,这两个都是有问题的:
我在 Excel 中的大部分数据列都是通过公式生成的,但在 Excel 中无法生成导致完全空白单元格的公式。并且只有一个完全空白的单元格将被视为 null(空字符串不起作用)。
-
任何计算结果为
#N/A的公式(由于实际查找错误或由于使用了NA()函数)将被视为空值。这似乎是理想的解决方案,直到我发现必须打开 Excel 工作簿才能使其工作。关闭工作簿后,OLEDB 突然开始将所有#N/As 视为字符串。这会导致在填充 DataTable 时抛出如下异常:输入字符串的格式不正确。无法在值列中存储 。预期类型是 Int32。
问题:如何在填写DataTable 时通过 Excel 公式指示空值而无需打开工作簿?或者如何使 #N/A 值即使在工作簿关闭时也被视为 null?
如果很重要,我的连接字符串是使用以下方法构建的:
var builder = new OleDbConnectionStringBuilder
{
Provider = "Microsoft.ACE.OLEDB.12.0",
DataSource = _workbookPath
};
builder.Add("Extended Properties", "Excel 12.0 Xml;HDR=Yes;IMEX=0");
return builder.ConnectionString;
(_workbookPath 是工作簿的完整路径)。
IMEX=0 和 IMEX=1 我都试过了,但没什么区别。
【问题讨论】:
-
我真的看不到这个问题?您可以修改公式吗?
-
@Cilvic,对不起,你是对的。我加一个。
-
@Cilvic,是的,我绝对可以编辑公式。我需要知道的是什么公式结果将为空。一旦知道这一点,我就可以在需要 null 的任何时候编辑公式以生成该值。
-
@Civic 之后对空值的评估是什么,这使得它们变得必要?是否有生成#N/A 值的现有公式的示例?
-
您也可以尝试保留空字符串 =IF(A1="","",A1)
标签: c# excel ado.net excel-2007 oledb