C# Excel互操作:如何格式化单元格以将值存储为文本

20

我正在使用一个 DataTable 向 Excel 电子表格写入数字,这些数字都是5位数,如果数字本身不足5位,则前面有0(例如,395将存储为00395)。

使用 C#将这些数字输入到 Excel 中时,它会将它们保存为数字并消除前导的0。是否有任何方法可以通过 C#对单元格进行格式化,以便将值存储为文本而不是数字?


2
请查看此答案 https://dev59.com/53I95IYBdhLWcg3w-DH0 - katit
1
@Katit:虽然问题相符,但我认为这里的答案更好,因为它不依赖于第三方库。 - Jeff Yates
3个回答

28

您可以使用SomeRange.NumberFormat = "@"; 或者如果在值前添加一个'并将其写入单元格,则Excel将其视为数字存储的文本,并提供视觉提示。


2
这个答案解决了我们公司软件中的一个重要问题,我需要按照显示的值来检索数值,但是当我将其设置到新表格时,它被插入为数字。简单的解决方法。我目前无法投票点赞,但下面是最终结果。
for (int h = 1; h <= 1; h++)
{
    int col = lastColl(sheets);
    for (int r = 1; r <= src.Count; r++)
    {
        sheets.Cells[r, col + 1] = "'"+src.Cells[r, h].Text.ToString().Trim();
    }
}

这个方法有效,但是更改NumberFormat的解决方案在我的情况下对于一个联邦快递的追踪码(14位数字)不起作用。 - Rob

0

//其中 [1] 是你想转为文本的列号

ExcelWorksheet.Columns[1].NumberFormat = "@";

//如果您想在工作簿中的所有工作表中格式化特定列,请使用以下代码。删除单个工作表的循环以及进行轻微更改。

//Excel文件所在的路径

string ResultsFilePath = @"C:\Users\krakhil\Desktop\TGUW EXCEL\TEST";

    Excel.Application ExcelApp = new Excel.Application();
    Excel.Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(ResultsFilePath);
    ExcelApp.Visible = true;

    //Looping through all available sheets
    foreach (Excel.Worksheet ExcelWorksheet in ExcelWorkbook.Sheets)
    {                
        //Selecting the worksheet where we want to perform action
        ExcelWorksheet.Select(Type.Missing);
        ExcelWorksheet.Columns[1].NumberFormat = "@";
    }

    //saving excel file using Interop
    ExcelWorkbook.Save();

    //closing file and releasing resources
    ExcelWorkbook.Close(Type.Missing, Type.Missing, Type.Missing);
    Marshal.FinalReleaseComObject(ExcelWorkbook);
    ExcelApp.Quit();
    Marshal.FinalReleaseComObject(ExcelApp);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接