除了将数字保存为数字之外,我的代码工作正常。 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);
}
答案 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);