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

C# 操作 Excel 避免長數字顯示為科學計數法

     編輯:關於C#

在使用 C# 透過 Excel COM 物件模型開發報表時,常會遇到長數字(如身分證號、帳號)被 Excel 自動轉為科學計數法顯示(例如 1.2345E+17)的問題。這是因為 Excel 預設將超過 15 位數的數字視為科學計數法。要解決此問題,必須在寫入資料前,將目標儲存格的格式設定為文字或自訂格式。

核心解決方案:設定 NumberFormatLocal 屬性

透過 Range.NumberFormatLocal 屬性指定格式字串 \"@\"(文字格式)或 \"#\"(自訂數字格式,不顯示千分位符號),即可強制 Excel 以原始樣貌顯示長數字。

完整程式碼範例

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

public void FormatLongNumber()
{
    Excel.Application excelApp = null;
    Excel.Workbook workbook = null;
    Excel.Worksheet worksheet = null;
    Excel.Range range = null;
    object missing = Missing.Value;

    try
    {
        excelApp = new Excel.Application();
        workbook = excelApp.Workbooks.Open(@"E:\1.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
        worksheet = (Excel.Worksheet)workbook.Worksheets[1];
        range = worksheet.get_Range("A1", missing);

        // 關鍵:設定儲存格格式為文字或自訂格式
        range.NumberFormatLocal = "@"; // 或使用 "#"

        workbook.SaveAs(@"E:\22.xls", missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"發生錯誤:{ex.Message}");
    }
    finally
    {
        // 正確釋放 COM 物件,避免 Excel 進程殘留
        if (workbook != null) { workbook.Close(false, missing, missing); Marshal.ReleaseComObject(workbook); }
        if (excelApp != null) { excelApp.Quit(); Marshal.ReleaseComObject(excelApp); }
        workbook = null; excelApp = null; worksheet = null; range = null;
        GC.Collect(); GC.WaitForPendingFinalizers();
    }
}

關鍵點補充

  • 格式字串選擇:\"@\" 將儲存格視為純文字,適合身分證、條碼等不需運算的長數字;\"#\" 則保留數字屬性但不科學計數法顯示。
  • 釋放資源:務必在 finally 區塊中依序釋放 Range、Worksheet、Workbook、Application 等 COM 物件,並呼叫 GC.Collect() 確保進程結束。
  • 適用場景:匯出報表、產生 Excel 模板、資料匯入前處理等。

掌握此技巧,即可在 C# Excel 報表開發中完美呈現長數字資料,避免使用者困擾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved