我正在使用OpenXML创建Microsoft Excel文件。我正在尝试使用
将双重类型变量(例如:4.987456789)插入到Excel中Cell cell = new Cell()
{
CellReference = "A2",
DataType = CellValues.String,
CellValue = new CellValue(Convert.ToString(value))
};
但是,当制作单元格时,它是文本形式,Excel表示“此单元格中的数字被格式化为文本或前面有撇号”。如何格式化单元格以插入双?
编辑: 对不起,这是双倍的?键入,我按照tutorial
答案 0 :(得分:3)
使用CellValues.Number
对我来说很好,例如:
double? value = 4.9874567891;
Cell cell2 = new Cell()
{
CellReference = "A2",
DataType = CellValues.Number,
CellValue = new CellValue(Convert.ToString(value))
};
在没有警告的情况下将双倍值打印到excel。
答案 1 :(得分:1)
我遇到了同样的问题。我按照各种帖子和答案的建议,在单元格上应用了一种风格......没有成功。
最后我找到了问题的根源,所以解决方案:
在我的循环中,我以相同的方式插入所有数据,即使用InsertSharedStringItem()
函数。
如果您在电子表格中插入一个数字,那么单元格格式将无用,您的号码将不会被视为数字。
你应该做的是“直接”插入它。
index =InsertSharedStringItem(myStringNumber, shareStringPart);
cell = InsertCellInWorksheet("A", 1, worksheetPart);
cell.CellValue = new CellValue(index.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
cell.StyleIndex = _doubleStyleId;
无效。
cell = InsertCellInWorksheet("A", 1, worksheetPart);
cell.CellValue = new CellValue(myStringNumber);
cell.DataType = new EnumValue<CellValues>(CellValues.Number);
cell.StyleIndex = _doubleStyleId;
与Claies写道:
Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet;
_doubleStyleId = createCellFormat(styleSheet, null,null, UInt32Value.FromUInt32(4));
可以找到createCellFormat()
的代码here
答案 2 :(得分:0)
OpenXML始终将单元格创建为内联文本,并依赖格式设置来确定Excel中的正确显示格式。 Excel中的每种数字格式都对应一个唯一的代码,并且样式可以应用于单元格,就像您可以在Excel中更改样式一样。
OpenXML Standard定义了一系列代码,无需创建自定义StyleSheet即可分配这些代码。
double的隐含格式为4 #,##0.00
所以首先要创建styleId:
Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet;
_doubleStyleId = createCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(4));
然后,在单元格上设置styleId:
cell.StyleIndex = _doubleStyleId;
答案 3 :(得分:0)
这次聚会晚了,但是我遇到了这个问题,对我来说,解决方案是默认使用本地语言进行字符串化,大概是使用','作为十进制分隔符
foreach ($array as $line)
fputcsv($fh, array_map('insertquote', $line), $delimiter);
function insertquote($value) {
return "\xEF\xBB\xBF".$value;
}
为我解决了。