背景:我正在从数据库中填充大量 asp.net c# GridViews 和 ListViews,随后用户可以将它们导出到 Excel。我想导出为本机 Excel(不是 html)。我不能使用办公自动化,我正在使用 JET,它工作正常。我无法控制用户的机器。
问题:在进行导出时,您必须告诉 Jet 每个字段是什么类型,在我的例子中是“文本”(varchar)或“数字”(双精度)。不同之处在于,如果您导出数字列,用户可以在 Excel 中对数据求和,因为字符串导出时带有前导撇号,因此在算术中没有多大用处。
目前我解析 Grid/ListView 的第一个数据行,检查每个值是数字还是文本,并相应地为列分配类型。这行得通,除非我在第一列中有一些看起来数字但实际上是文本字符串的东西。我不想解析每一行以确保我有正确的数据类型,因为其中一些导出非常大。
当我从数据库加载 Grid/ListView 时,数据库当然知道每个字段是什么类型。所以我的问题是......如何提取 Grid/ListView 项目后面的数据库项目的类型?我可以将其显式编码为项目的属性,但这是重复我已经拥有的信息,只要我能得到它。
我知道我有一个 DataTable,然后我可以从中获取基础类型,但大多数情况下我没有方便的表,只有 Grid/ListView。
--(编辑)请注意,如果您尝试将空字符串插入可为空的数字列,Jet 会抛出异常。这样做的方法是从插入语句中省略该列名,或者输出一个零。