I'm using OpenXML to create Microsoft Excel file. I'm trying to insert a double type variable (Example : 4.987456789) into the Excel using
Cell cell = new Cell()
{
CellReference = "A2",
DataType = CellValues.String,
CellValue = new CellValue(Convert.ToString(value))
};
But, when the cell is being made, it's in text form and Excel says "The number in this cell is formatted as text or preceded by an apostrophe." How can format the cell to insert double?
Edit : Sorry, It's double? type and I follow this tutorial
Using CellValues.Number
works fine for me, for example :
double? value = 4.9874567891;
Cell cell2 = new Cell()
{
CellReference = "A2",
DataType = CellValues.Number,
CellValue = new CellValue(Convert.ToString(value))
};
Double value printed to excel without the warning you got.
I had the same problem. I followed the advices from the various posts and answers applying a style on the cell... no success.
Finally I found the origin of the problem and so the solution :
In my loop, I inserted all data in the same way i.e. using the InsertSharedStringItem()
function.
If you insert a number in your spreadsheet like that, the cell formating will be useless and your number will not be considered as a number.
What you should do is to insert it "directly".
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;
will not work.
cell = InsertCellInWorksheet("A", 1, worksheetPart);
cell.CellValue = new CellValue(myStringNumber);
cell.DataType = new EnumValue<CellValues>(CellValues.Number);
cell.StyleIndex = _doubleStyleId;
is OK
with as Claies wrote :
Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet;
_doubleStyleId = createCellFormat(styleSheet, null,null, UInt32Value.FromUInt32(4));
the code for createCellFormat()
can be found here
OpenXML always creates a cell as Inline Text, and relies upon formatting to determine the correct display format within Excel. Each number format in Excel corresponds to a unique code, and a style can be applied to the cell, the same way you might change the style from within Excel.
The OpenXML Standard defines a series of codes which can be assigned without creating a custom StyleSheet.
The implied format for a double is 4 #,##0.00
so first you create the styleId:
Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet;
_doubleStyleId = createCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(4));
then, set the styleId on the cell:
cell.StyleIndex = _doubleStyleId;
来源:https://stackoverflow.com/questions/24256243/changing-datatype-of-cell-to-double