无需Interop,使用NPOI打印XLSX文件的分步实现问询
无需转PDF的XLSX打印实现方案(禁用Interop)
第一步:用NPOI 5.6.0配置打印参数到XLSX文件
在生成XLSX文件时,先把横向打印、页面铺满的配置写入工作表,后续打印工具会自动读取这些设置。
using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using System.IO; // 初始化工作簿和工作表(假设你已有生成逻辑,这里补充打印配置) var workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet("打印测试"); // 1. 开启横向打印 sheet.PrintSetup.Landscape = true; // 2. 设置内容铺满单页的宽度和高度 sheet.FitToPage = true; sheet.PrintSetup.FitWidth = 1; // 强制铺满1页宽度 sheet.PrintSetup.FitHeight = 1; // 强制铺满1页高度 // 可选:指定打印区域(按需设置) sheet.SetPrintArea(0, 0, sheet.LastRowNum, sheet.GetRow(0).LastCellNum - 1); // 保存配置好的XLSX using (var fs = new FileStream("output.xlsx", FileMode.Create, FileAccess.Write)) { workbook.Write(fs); }
第二步:用第三方库直接打印XLSX
NPOI本身无打印能力,推荐以下两个无需Interop的免费库:
选项1:Spire.XLS Free(适合小文件打印)
免费版支持读取XLSX的打印配置,直接调用系统打印机,仅对打印页数有限制(最多10页)。
using Spire.Xls; // 加载已配置打印参数的XLSX Workbook workbook = new Workbook(); workbook.LoadFromFile("output.xlsx"); Worksheet sheet = workbook.Worksheets[0]; // 方式1:弹出打印对话框让用户选择打印机 sheet.PrintDialog(); // 方式2:静默打印到默认打印机 // sheet.Print();
选项2:GemBox.Spreadsheet(每月100次免费操作额度)
支持读取文件内的打印配置,适配多框架(.NET Framework/.NET Core/.NET 6+)。
using GemBox.Spreadsheet; // 激活免费许可证 SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY"); // 加载XLSX文件 ExcelFile workbook = ExcelFile.Load("output.xlsx"); ExcelWorksheet sheet = workbook.Worksheets[0]; // 弹出打印对话框 sheet.Print(); // 静默打印到默认打印机 // sheet.Print(new PrintOptions() { ShowPrintDialog = false });
注意事项
- 打印前务必确认XLSX的打印参数已正确写入,第三方库会自动继承这些设置,无需重复配置。
- 根据项目框架选择对应版本的第三方库,避免兼容性问题。
- 优先通过打印对话框测试参数是否生效,再切换到静默打印模式。
内容的提问来源于stack exchange,提问作者khalid tounoussi
相关产品推荐
相关产品推荐

