导出到excel时出现十进制解析问题
本文关键字:问题 十进制 excel | 更新日期: 2023-09-27 18:08:58
我正在尝试导出数据到excel,目前使用此代码源:http://www.codeproject.com/Tips/659666/Export-very-large-data-to-Excel-file
我从firebird数据库中获取数据,其中一半字段是小数。问题是当我导出数据到Excel时,我所有的十进制值如123,45将被视为Excel中的文本,然而值如0或200被视为数字。
我试着像这样解析我的值:
public static bool isDecimal(string s)
{
NumberStyles style;
CultureInfo culture;
decimal number;
style = NumberStyles.AllowDecimalPoint | NumberStyles.Float;
culture = CultureInfo.CurrentCulture;
if (Decimal.TryParse(s, style, culture, out number))
return true;
else
return false;
}
但是当我在Excel中使用上述函数时,它不起作用:
foreach (DataRow dsrow in ResultsData.Rows)
{
DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row();
foreach (DataColumn col in ResultsData.Columns)
{
DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
if (isDecimal(dsrow[col].ToString()))
{
cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.Number;
}
else
{
cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
}
cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString());
newRow.AppendChild(cell);
}
sheetData.AppendChild(newRow);
}
注:我的国家使用俄罗斯文化info(123,45)而不是(123.45)
我认为这是电子表格的文化——它承认123,45是一个数字。有办法改变sheetData
的文化吗?
如果没有,也许您可以将','替换为'。的导入和格式列适用于RU?我想说,这是电子表格的文化——它把123和45看作是一个数字。有办法改变sheetData
的文化吗?
如果没有,也许您可以将','替换为'。的导入和格式列适用于RU?例如
string value;
if (isDecimal(dsrow[col].ToString()))
{
cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.Number;
value = dsrow[col].ToString()
}
else
{
cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
value = dsrow[col].ToString().Replace(System.Globalization.CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator, ".");
// Or simply
// value = dsrow[col].ToString().Replace(",", ".");
}
cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(value);