使用C#中的Open Xml SDK将DataTable导出到Excel时保留数据类型

时间:2017-08-11 09:59:54

标签: c# xml excel datarow

除了将数字保存为数字之外,我的代码工作正常。 if语句在我调试时捕获double值。但是,除了字符串到Excel之外,我无法写入数据类型。如果我应该更精确,Excel中的单元格是正确的,但它们不是数字。

foreach (System.Data.DataRow dsrow in table.Rows)
{
    DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row();
    foreach (String col in columns)
    {
        DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();

        if (dsrow[col].GetType() == typeof(Double))
        {
            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);
}

1 个答案:

答案 0 :(得分:0)

我一直在努力解决同样的问题。 如果您使用逗号作为小数分隔符的区域设置,则似乎出现问题。在XML中,它应该是美国格式。

因此,在ToString中指定CutureInfo对我有用:

var dataRow = new Row();
var cell = new Cell();
cell.CellValue = new CellValue(1.234.ToString(new CultureInfo("en-US")));
cell.DataType = CellValues.Number;
dataRow.AppendChild(cell);
sheetData.AppendChild(dataRow);