Database 将db作为所有文本读取
我正在读一个xlsx文件作为数据库来做一些工作 我注意到它以int和date的形式读取一些feild,尽管我只是希望它以文本的形式出现。是否仍有覆盖此功能的方法 代码如下 (请随时指出我可以用代码做得更好的任何事情) 在每个单元格值前面添加一个“Database 将db作为所有文本读取,database,overriding,xlsx,Database,Overriding,Xlsx,我正在读一个xlsx文件作为数据库来做一些工作 我注意到它以int和date的形式读取一些feild,尽管我只是希望它以文本的形式出现。是否仍有覆盖此功能的方法 代码如下 (请随时指出我可以用代码做得更好的任何事情) 在每个单元格值前面添加一个“”(撇号)。这将告诉Excel“即使它看起来像数字/日期/任何东西,也要将其视为文本” 不是你想要的吗?然后不要使用DB连接器,因为它已严重损坏。您会注意到,当您有一个包含混合单元格的列时。在这种情况下,DB驱动程序将查看前8行,并将该类型设置为它找到的
”
(撇号)。这将告诉Excel“即使它看起来像数字/日期/任何东西,也要将其视为文本”
不是你想要的吗?然后不要使用DB连接器,因为它已严重损坏。您会注意到,当您有一个包含混合单元格的列时。在这种情况下,DB驱动程序将查看前8行,并将该类型设置为它找到的大多数类型,并为该列中不适合的任何类型返回NULL。通过入侵你的注册表
而是使用OLE API打开工作簿,然后从那里开始,逐行读取,根据需要转换数据(这应该包含从C#访问Excel的所有可能方法,以及可能遇到的所有错误和问题).您是否有一个读取xls或xlsx的旧api的好例子?您可以在这里找到Excel api:PS:它是OLE,而不是“旧”:-)
private DataSet ExceltoDT(OpenFileDialog dialog)
{
try
{
string connst = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dialog.FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO\";";
string sheet = "Sheet1$";
string strSQL = "SELECT * FROM [" + sheet + "]";
//string Table = "081710";
OleDbConnection xlsdb = new OleDbConnection(connst);
xlsdb.Open();
OleDbDataAdapter adp = new OleDbDataAdapter(strSQL, xlsdb);
DataSet ds2 = new DataSet();
adp.Fill(ds2);
adp.Dispose();
xlsdb.Close();
xlsdb.Dispose();
return ds2;
}
catch (StackOverflowException stack_ex2)
{
MessageBox.Show("(2007 Excel file) Stack Overflowed!" + "\n" + stack_ex2.Message);
return null;
}
catch (OleDbException ex_oledb2)
{
MessageBox.Show("An OleDb Error Thrown!" + "\n" + ex_oledb2.Message);
return null;
}
}