OLEDB读取excel无法处理数据以特殊字符撇号(')开头

时间:2013-12-19 08:53:22

标签: c# excel oledb

以下代码读取Excel工作表并将所有数据复制到C#DataTable

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
conn = new OleDbConnection(strConn);
conn.Open();

string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "select * from [" + Sheet1$+ "]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1");
DataTable DT = ds.Tables[0];

当我查看DataTable DT中的数据时,我发现excel中以撇号开头的数据无法读取(例如'0010,'0026,...等),即在{ {1}}。

任何建议的解决方案?

1 个答案:

答案 0 :(得分:0)

这是使用Excel vba的有趣之处。

查看是否存在撇号的唯一方法是使用此语法

Dim s As String
Cells(1, 2).Value = "'abc"
s = Cells(1, 2).Formula
s = Cells(1, 2).PrefixCharacter

当您单步执行此vba代码时,如果您将prefixCharacter添加到输出中,它将仅显示撇号。

所以我所知道的唯一解决办法是循环遍历所有细胞......用愚蠢的东西代替撇号。 #8217; (html撇号)然后将其修复到您的数据库..

如果你觉得自己被打了一巴掌,那么VBA会不时地对你这么做。这不是OLEDB问题,而是一个excel问题