我正在使用Office OpenXml写入Excel文件。该文件是一个模板,因此它已经包含了我的列的所有标题和格式。我将具有前导零的数字插入到“特殊”列中,该列基本上是10位数字。但是在我的代码中,我可以看到它将值设置为例如0000000004
。工作表中的结果在该单元格中的值为4
,而实际的单元格显示为0000000004
。
这是我写入单元格的代码。
if (reader[2].ToString().Length < 9)
{
myworksheet.Cell(firstrow, 12).Value = reader[2].ToString(); //0045678945
}
else
{
myworksheet.Cell(firstrow, 12).Value = reader[2].ToString().Substring(0, 9); //0045678945
}
当我打开excel表时,如上所述,我的值为45678945
而不是0045678945
任何帮助都将不胜感激。
答案 0 :(得分:7)
获得所需结果的最简单方法是将撇号添加到您放入单元格中的值 - 这告诉Excel它是一个字符串:
Cell.Value= "'" & "000123"
将显示为000123
以下是一些代码,用于说明工作原理(至少它们如何在Excel 2010中工作):
Sub testFormat()
[A1].Value = "000123"
[A2].Value = "'000123"
[A3].Value = "000123"
[A3].NumberFormat = "@"
[A4].Value = "'000123"
[A4].NumberFormat = "@"
End Sub
结果如下:
如您所见,有三个单元格显示前导零:
"@"
(=“text”)格式我不确定你做了什么让撇号出现在你的电子表格中......但是我希望上面的内容会激励你解决你的问题。
答案 1 :(得分:1)
如果我理解正确:
Excel显示带有前导零的数字,通过OOXML从C#中读取它们,但是看不到前导零。
Excel可能会设置一些格式规则,而不是存储实际的前导零。
有几种方法可以抵消这种情况。以下是我想到的“最便宜的”,选择一个:
答案 2 :(得分:0)
为了使前导零从Excel中不被截断,您需要将单元格的数字格式设置为Text
。
答案 3 :(得分:0)
我相信如果你将单元格的DataType设置为String或SharedString,前导0将被保留。 Excel会将此视为文本,只是按字面意思处理该值,而不是尝试应用任何格式规则。
cell.DataType = new EnumValue<CellValues>( CellValues.SharedString );
OR cell.DataType = new EnumValue(CellValues.String);
答案 4 :(得分:0)
如果您正在使用DataTable,则需要使用另一个DataTable,然后您需要遍历数据表中的整个单元格,并使用空格(即“&amp; nbsp”;)添加单元格文本。我们无法修改同一个表,因为它会抛出一个异常,说“Collection is Modified”。我们必须采用一个新的数据表。
请考虑以下代码。
//To get the result with leading zero's in excel this code is written.
DataTable dtUpdated=new DataTable();
//This gives similar schema to the new datatable
dtUpdated = dtReports.Clone();
foreach (DataRow row in dtReports.Rows)
{
for (int i = 0; i < dtReports.Columns.Count; i++)
{
string oldVal = row[i].ToString();
string newVal = " "+oldVal;
row[i] = newVal;
}
dtUpdated.ImportRow(row);
}
我们可以将此更新的表绑定到datagrid,以便它可用于Excel转换。