首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 操作 Excel 生成報表(七):防止長數字科學計數法顯示

     編輯:關於C語言

問題

Excel 單元格存長數字(>11 位)默認顯示為科學計數法(如 1.23E+17),導致報表不可讀。

解決:設置 NumberFormatLocal


using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;

public void FixNumberFormat()
{
    Excel.Application app = null;
    Excel._Workbook wb = null;
    Excel._Worksheet ws = null;
    Excel.Range rng = null;
    object opt = Missing.Value;

    try
    {
        app = new Excel.Application();
        wb = app.Workbooks.Open(@"e:\1.xls", opt, opt, opt, opt, opt, opt, opt, opt, opt, opt, opt, opt, opt);
        ws = (Excel._Worksheet)wb.Worksheets[1];
        rng = ws.get_Range("A1", opt);

        // 關鍵:設置為文本/通用格式,# 表示按原數字顯示
        rng.NumberFormatLocal = "#";

        wb.SaveAs(@"e:\22.xls", opt, opt, opt, opt, opt,
            Excel.XlSaveAsAccessMode.xlNoChange, opt, opt, opt, opt, opt);
    }
    catch (Exception ex) { MessageBox.Show(ex.Message); }
    finally
    {
        wb?.Close(opt, opt, opt);
        app?.Workbooks.Close();
        app?.Quit();
        Marshal.ReleaseComObject(wb);
        Marshal.ReleaseComObject(app);
        wb = null; app = null;
        GC.Collect(); GC.WaitForPendingFinalizers();
    }
}

常用 NumberFormatLocal 值

最佳實踐

  • 寫入長數字(身份證、銀行卡、訂單號)前預先設置該列/區域格式為 "@" 或 "#"。
  • 或將數字作為字符串寫入:rng.Value = "'" + longNumber(前置單引號強制文本)。
  • 批量寫入時用 Range.NumberFormatLocal = "@" 整列設置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
格式字符串效果
#按原數字顯示,不科學計數法
0同 #,但強制顯示位數不足補 0
@文本格式,完全按輸入字符串顯示
#,##0.00千分位分隔,保留兩位小數
yyyy-mm-dd日期格式