将单元格的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;