我有一个Excel文档,其中一列的类型是文本。一些单元格包含字母和数字的组合,而其他单元格仅包含数字。我发现,如果单元格值只包含数字,阅读器将单元格中的值解释为长整数并将其截断。所以,我得到的不是"120500923",而是"1.20501e+008"。下面是我的代码:
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="myfile.xls";Extended Properties="Excel 8.0;HDR=NO;IMEX=1"");
OleDbCommand myCommand = new OleDbCommand("Select * from [Sheet1];");
myConnection.Open();
myCommand.Connection = myConnection;
OleDbDataReader myReader = myCommand.ExecuteReader();
string[] myLine = new string[5];
while (myReader.Read())
{
for (int i = 0; i < 5; i++) //read the first 5 columns
{
myLine[i] = (string)myReader[i].ToString();
}
}
我如何指示读者将所有单元格值视为字符串而不是数字?我不喜欢修改excel电子表格,因为它是由人编辑的,我想让它保持简单。
谢谢,尼克
经过一些谷歌搜索和实验,我发现了一些有用的东西。我发现,如果将连接字符串从Jet替换为ACE,则单元格值将被视为字符串。因此,我将代码中的第一行修改如下:
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="myfile.xls";Extended Properties="Excel 12.0;HDR=YES;IMEX=1"");
由于我的计算机是Windows 10/64位,默认安装的MDAC驱动程序是64位的。我不得不卸载它并安装32位版本(我使用SharpDevelop,显然我只能编译32位应用程序),从http://www.microsoft.com/en-us/download/details.aspx?id=13255。我可以使用12版,即使我没有安装Office 2003或更高版本。