Ton*_*ich 34 c# excel export-to-excel
当我将值从数据表复制到Excel工作表时,我丢失了前导零.这是因为可能Excel将值视为数字而不是文本.
我在C#中创建了工作表,我正在复制这样的值:
myWorksheet.Cells[i + 2, j] = dtCustomers.Rows[i][j - 1].ToString();
Run Code Online (Sandbox Code Playgroud)
如何将整列或每个单元格格式化为文本?一个相关的问题,如何myWorksheet.Cells[i + 2, j]
在Intellisense中强制显示样式属性?
Joe*_*son 40
下面是一些代码,用于将A列和C列格式化为SpreadsheetGear for .NET中的文本,它具有类似于Excel的API - 除了SpreadsheetGear经常更强类型的事实.要弄清楚如何将其转换为使用Excel/COM,应该不难:
IWorkbook workbook = Factory.GetWorkbook();
IRange cells = workbook.Worksheets[0].Cells;
// Format column A as text.
cells["A:A"].NumberFormat = "@";
// Set A2 to text with a leading '0'.
cells["A2"].Value = "01234567890123456789";
// Format column C as text (SpreadsheetGear uses 0 based indexes - Excel uses 1 based indexes).
cells[0, 2].EntireColumn.NumberFormat = "@";
// Set C3 to text with a leading '0'.
cells[2, 2].Value = "01234567890123456789";
workbook.SaveAs(@"c:\tmp\TextFormat.xlsx", FileFormat.OpenXMLWorkbook);
Run Code Online (Sandbox Code Playgroud)
免责声明:我拥有SpreadsheetGear LLC
小智 14
如果在添加前导零的数值之前将单元格格式设置为"文本" ,则会保留前导零,而不必通过添加撇号来扭曲结果.如果您尝试手动将前导零值添加到Excel中的默认工作表,然后将其转换为文本,则删除前导零.如果您首先将单元格转换为文本,然后添加您的值,这很好.以编程方式执行时,同样的原则适用.
// Pull in all the cells of the worksheet
Range cells = xlWorkBook.Worksheets[1].Cells;
// set each cell's format to Text
cells.NumberFormat = "@";
// reset horizontal alignment to the right
cells.HorizontalAlignment = XlHAlign.xlHAlignRight;
// now add values to the worksheet
for (i = 0; i <= dataGridView1.RowCount - 1; i++)
{
for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
{
DataGridViewCell cell = dataGridView1[j, i];
xlWorkSheet.Cells[i + 1, j + 1] = cell.Value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
在您写入Excel之前需要更改格式:
xlApp = New Excel.Application
xlWorkSheet = xlWorkBook.Sheets("Sheet1")
Dim cells As Excel.Range = xlWorkSheet.Cells
'set each cell's format to Text
cells.NumberFormat = "@"
'reset horizontal alignment to the right
cells.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight
Run Code Online (Sandbox Code Playgroud)
对我来说适用于 Excel Interop 的解决方案:
myWorksheet.Columns[j].NumberFormat = "@"; // column as a text
myWorksheet.Cells[i + 2, j].NumberFormat = "@"; // cell as a text
Run Code Online (Sandbox Code Playgroud)
此代码应在将数据放入 Excel之前运行。列号和行号从 1 开始。
再详细一点。虽然对 SpreadsheetGear 参考的接受响应看起来几乎是正确的,但我对此有两个担忧: