将Excel列(或单元格)格式化为C#中的文本?

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)


san*_*alk 6

在您写入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)


sar*_*arh 6

对我来说适用于 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 参考的接受响应看起来几乎是正确的,但我对此有两个担忧:

  1. 我没有使用 SpreadsheetGear。我对通过 Excel 互操作进行常规 Excel 通信感兴趣,无需任何 3rdparty 库,
  2. 我正在寻找按数字格式化列的方法,而不是使用“A:A”之类的范围。