[英]Read Excel using OLEDB with Cell Format
我正在C#中使用ADO DB阅读excel表格,但是我面临的问题是它无法以其格式复制单元格数据。 例如
我的一个单元格采用货币格式($ 2,123.45),因此当我得到结果集时,我得到的单元格值为(2123.45)。
有什么方法可以获取与Excel工作表中显示的单元格数据完全相同的单元格数据。 以下是我从excel获取结果集的代码
string sQuery = "Select * From [" + sSheet + "$]";
if (dtType == DataLayer.TestData)
sWorkbook = Path.GetDirectoryName(ConfigurationManager.AppSettings["resourcesFolder"]) + @"\Data\Test Data\" + sWorkbook;
if (dtType == DataLayer.ExpectedData)
sWorkbook = Path.GetDirectoryName(ConfigurationManager.AppSettings["resourcesFolder"]) + @"\Data\Expected Data\" + sWorkbook;
string cnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sWorkbook + "; Extended Properties= 'Excel 8.0; HDR=Yes; IMEX=1'";
oConn.Open(cnStr, null, null, 0);
oRS.Open(sQuery, cnStr, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic, -1);
oConn.Close();
请确实提供一些解决方案。
注意:在最坏的情况下,如果我的性能没有受到影响,我可以选择其他选项来读取Excel。
这可能是问题所在:通过ConnectionStrings :找出位于注册表REG_DWORD“ TypeGuessRows”的[HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Jet \\ 4.0 \\ Engines \\ Excel]。 这是不让Excel仅使用前8行猜测列数据类型的关键。 将此值设置为0以扫描所有行。 这可能会损害性能。 另请注意,添加IMEX = 1选项可能会使IMEX功能仅在8行之后设置。 而是使用IMEX = 0来确保强制注册表TypeGuessRows = 0(扫描所有行)起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.