将单元格的DataType更改为Double

我正在使用OpenXML创建Microsoft Excel文件。 我正在尝试将双类型变量(例如:4.987456789)插入到Excel中

Cell cell = new Cell() { CellReference = "A2", DataType = CellValues.String, CellValue = new CellValue(Convert.ToString(value)) }; 

但是,当制作单元格时,它是文本forms,Excel表示“此单元格中的数字格式为文本或前面有撇号”。 如何格式化单元格插入双?

编辑:对不起,这是双倍的? 键入,我按照本教程

使用CellValues.Number对我来说很好,例如:

 double? value = 4.9874567891; Cell cell2 = new Cell() { CellReference = "A2", DataType = CellValues.Number, CellValue = new CellValue(Convert.ToString(value)) }; 

打印出双倍价值而不会发出警告。

我有同样的问题。 我按照各种post和答案的建议,在单元格上应用了一种风格……没有成功。

最后我找到了问题的根源,所以解决方案:

在我的循环中,我以相同的方式插入所有数据,即使用InsertSharedStringItem()函数。

如果您在电子表格中插入一个数字,那么单元格格式将无用,您的编号将不会被视为数字。

你应该做的是“直接”插入它。


 index =InsertSharedStringItem(myStringNumber, shareStringPart); cell = InsertCellInWorksheet("A", 1, worksheetPart); cell.CellValue = new CellValue(index.ToString()); cell.DataType = new EnumValue(CellValues.SharedString); cell.StyleIndex = _doubleStyleId; 

不管用。


 cell = InsertCellInWorksheet("A", 1, worksheetPart); cell.CellValue = new CellValue(myStringNumber); cell.DataType = new EnumValue(CellValues.Number); cell.StyleIndex = _doubleStyleId; 

没关系

与克莱斯写道:

 Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet; _doubleStyleId = createCellFormat(styleSheet, null,null, UInt32Value.FromUInt32(4)); 

可以在这里找到createCellFormat()的代码

OpenXML始终将单元格创建为内联文本,并依赖格式设置来确定Excel中的正确显示格式。 Excel中的每种数字格式都对应一个唯一的代码,并且样式可以应用于单元格,就像您可以在Excel中更改样式一样。

OpenXML标准定义了一系列代码,可以在不创建自定义StyleSheet的情况下分配这些代码。

double的隐含格式是4 #,##0.00

所以首先你创建styleId:

 Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet; _doubleStyleId = createCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(4)); 

然后,在单元格上设置styleId:

 cell.StyleIndex = _doubleStyleId;