导出到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)

导出到excel时出现十进制解析问题

我认为这是电子表格的文化——它承认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);