用openxml读取excel,然后将读出的数据插到数据库,现在出现一个问题:读某个单元格的数据时,比如excel中的值是0.8,debug代码时,读出的值却是0.32,这个单元格是有公式的,值是自动算出来的,下面是我的代码:addressName是单元格名字(比如:Q5、R13之类的)
Cell theCell = worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();
if (theCell != null)
{
value = theCell.InnerText;
if (theCell.CellFormula != null)
{
if (theCell.CellValue != null)
{
value = theCell.CellValue.InnerText;
}
else {
return null;
}
}
}
比如读到Q51(Q列第51行)的值时,theCell.InnerText的值是“=ROUND(SUM(J51*I51,L51*K51,N51*M51,P51*O51),2)0.320000”,theCell.CellValue.InnerText的值是“0.320000”,但实际上在excel中Q51的值是0.8,诡异的是并不是Q列多有的值都会读错,只有个别的读错。
excel中的sheet是加了密码保护的,把密码保护去掉就不会读错,但读不到公式,下面是给sheet加密的代码:SheetProtection sheetProtection = new SheetProtection() { Sheet = true, Objects = true, Scenarios = true, Password = "****" };
worksheet.InsertAfter(sheetProtection, ws.GetFirstChild<SheetData>());
有哪位大神遇到过这种情况或有办法解决的,麻烦帮帮我,谢谢!
Cell theCell = worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();
if (theCell != null)
{
value = theCell.InnerText;
if (theCell.CellFormula != null)
{
if (theCell.CellValue != null)
{
value = theCell.CellValue.InnerText;
}
else {
return null;
}
}
}
比如读到Q51(Q列第51行)的值时,theCell.InnerText的值是“=ROUND(SUM(J51*I51,L51*K51,N51*M51,P51*O51),2)0.320000”,theCell.CellValue.InnerText的值是“0.320000”,但实际上在excel中Q51的值是0.8,诡异的是并不是Q列多有的值都会读错,只有个别的读错。
excel中的sheet是加了密码保护的,把密码保护去掉就不会读错,但读不到公式,下面是给sheet加密的代码:SheetProtection sheetProtection = new SheetProtection() { Sheet = true, Objects = true, Scenarios = true, Password = "****" };
worksheet.InsertAfter(sheetProtection, ws.GetFirstChild<SheetData>());
有哪位大神遇到过这种情况或有办法解决的,麻烦帮帮我,谢谢!
解决方案 »
- 【急】ASPX 部分页面被挂马
- 连接Oracle数据库,引发“System.InvalidOperationException”类型的异常
- .net跪地求救!
- 散分!网站日访问量突破100,哈哈,虽然不多,这是第一步值得庆贺
- 请问如何自动生成静态页面?
- 请高手推荐几本书asp.net方面的书,最好入门简单的。谢谢!最好是电子版的。
- 在.NET2003里怎样实现DataGrid水晶报表打印 WEB程序的?在线等!望高手速度解决!谢谢!急!急!急!!!
- 我装.NET时总是提示我装FRONTPAGE的服务器扩展,这东西在哪呀
- .net中遇到的奇怪的问题
- 请教各位讨论,Cookie And Session权限储存时哪个好一些?有些很多笨客户的IE不支持Cookie(见内容)
- 手机网站支付怎么弄?
- 为什么取不到前台控件的数据值?
不行就换一个组件,像epplus也不错