You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C# DataTable中带前置零的数值以文本格式导出至Excel?

解决C#导出DataTable到Excel保留前置零的问题

核心思路是直接设置目标单元格的格式为文本类型,而非通过添加单引号的方式——后者需要手动编辑单元格才会生效,前者能让Excel直接以文本格式存储并显示带前置零的内容。以下是两种常用库的实现方案:

方案1:使用EPPlus

EPPlus是.NET生态中处理Excel的主流库之一,支持直接设置单元格格式:

using OfficeOpenXml;
using System.IO;
using System.Data;

// 准备你的DataTable数据
DataTable dataTable = GetYourDataTable();

var outputFile = new FileInfo("ExportedData.xlsx");
using (var excelPackage = new ExcelPackage(outputFile))
{
    var worksheet = excelPackage.Workbook.Worksheets.Add("DataSheet");
    
    // 导入DataTable到工作表(包含表头)
    worksheet.Cells["A1"].LoadFromDataTable(dataTable, printHeaders: true);
    
    // 假设第2列(B列,索引从1开始)是需要保留前置零的列
    var targetColumn = worksheet.Column(2);
    // 设置列格式为文本(@是Excel的文本格式代码)
    targetColumn.Style.Numberformat.Format = "@";
    
    // 确保单元格值以字符串形式写入(避免Excel自动转数值)
    for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
    {
        worksheet.Cells[row, 2].Value = dataTable.Rows[row - 2][1].ToString();
    }
    
    excelPackage.Save();
}

方案2:使用NPOI

如果需要兼容旧环境或使用开源免费的NPOI,可通过设置单元格样式实现:

using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
using System.Data;

DataTable dataTable = GetYourDataTable();

var workbook = new XSSFWorkbook();
var worksheet = workbook.CreateSheet("DataSheet");

// 创建文本格式的单元格样式
var textCellStyle = workbook.CreateCellStyle();
var dataFormat = workbook.CreateDataFormat();
textCellStyle.DataFormat = dataFormat.GetFormat("@");

// 写入表头
var headerRow = worksheet.CreateRow(0);
for (int colIndex = 0; colIndex < dataTable.Columns.Count; colIndex++)
{
    headerRow.CreateCell(colIndex).SetCellValue(dataTable.Columns[colIndex].ColumnName);
}

// 写入数据行
for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
{
    var dataRow = worksheet.CreateRow(rowIndex + 1);
    for (int colIndex = 0; colIndex < dataTable.Columns.Count; colIndex++)
    {
        var cell = dataRow.CreateCell(colIndex);
        // 对目标列应用文本样式
        if (colIndex == 1) // 假设第2列(索引从0开始)需要保留前置零
        {
            cell.CellStyle = textCellStyle;
            cell.SetCellValue(dataTable.Rows[rowIndex][colIndex].ToString());
        }
        else
        {
            cell.SetCellValue(dataTable.Rows[rowIndex][colIndex].ToString());
        }
    }
}

// 保存文件
using (var fileStream = new FileStream("ExportedData.xlsx", FileMode.Create))
{
    workbook.Write(fileStream);
}

关键注意点

  • 确保DataTable中目标列的数值已经是字符串类型,如果是数值类型,先通过.ToString()转换后再写入单元格。
  • 不要使用添加单引号的方式,这种方式只是让Excel在编辑时识别为文本,默认状态下不会自动显示正确格式。

内容的提问来源于stack exchange,提问作者PowerFit141

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:25:14