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

如何用C#写入.xlsb二进制文件?OpenXML无效且不想用Excel Interop

不依赖Excel Interop的C#写入.xlsb文件方案

方案1:使用EPPlus库

EPPlus从5.x版本开始原生支持Excel二进制格式(.xlsb),非商用场景可免费使用,步骤如下:

  • 通过NuGet安装EPPlus包
  • 示例代码:
using OfficeOpenXml;
using System.IO;

// 设置许可证上下文(非商用场景)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

// 创建或打开.xlsb文件
using var package = new ExcelPackage(new FileInfo("output.xlsb"));
var worksheet = package.Workbook.Worksheets.Add("Sheet1");

// 写入数据
worksheet.Cells["A1"].Value = "ID";
worksheet.Cells["B1"].Value = "Name";
worksheet.Cells["A2"].Value = 1;
worksheet.Cells["B2"].Value = "张三";

// 保存文件
package.Save();

方案2:使用NPOI库

NPOI是开源.NET库,支持全系列Excel格式(包括.xlsb),无商用限制:

  • 通过NuGet安装NPOI和NPOI.OOXML包
  • 示例代码:
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;

// 创建.xlsb工作簿实例
IWorkbook workbook = new XSSFWorkbook(XSSFWorkbookType.XLSB);
ISheet sheet = workbook.CreateSheet("Sheet1");

// 写入表头
IRow headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("ID");
headerRow.CreateCell(1).SetCellValue("Name");

// 写入数据行
IRow dataRow = sheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue(1);
dataRow.CreateCell(1).SetCellValue("张三");

// 输出到文件
using var fs = new FileStream("output.xlsb", FileMode.Create);
workbook.Write(fs);

OpenXML SDK的正确用法(针对你的失败情况)

OpenXML本身支持.xlsb,之前失败大概率是未正确处理二进制包结构。.xlsb与.xlsx的核心区别是用二进制存储XML部件,以下是可运行的示例:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

// 创建.xlsb文件
using var spreadsheetDocument = SpreadsheetDocument.Create(
    "output.xlsb", SpreadsheetDocumentType.Workbook);

// 添加工作簿部件
var workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();

// 添加工作表部件并关联
var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
var sheets = workbookPart.Workbook.AppendChild(new Sheets());
sheets.Append(new Sheet()
{
    Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
    SheetId = 1,
    Name = "Sheet1"
});

// 获取数据容器并写入内容
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
// 表头行
sheetData.Append(new Row(
    new Cell() { CellValue = new CellValue("ID"), DataType = CellValues.String },
    new Cell() { CellValue = new CellValue("Name"), DataType = CellValues.String }
));
// 数据行
sheetData.Append(new Row(
    new Cell() { CellValue = new CellValue("1"), DataType = CellValues.Number },
    new Cell() { CellValue = new CellValue("张三"), DataType = CellValues.String }
));

// 保存工作簿
workbookPart.Workbook.Save();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:50:23