NPOI 是一个开源的 .NET 库,用于读写 Microsoft Office 格式的文件,包括 Excel。使用 NPOI,你可以轻松地在 C# 中处理 Excel 文件,包括合并单元格。以下是一个示例,演示如何使用 NPOI 合并两个 Excel 文件的内容。
首先,确保你已经安装了 NPOI。你可以通过 NuGet 包管理器来安装它:
Install-Package NPOI
或者通过 .NET CLI:
dotnet add package NPOI
以下是一个简单的示例,说明如何将两个 Excel 文件的内容合并到一个新的 Excel 文件中:
csharpusing NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath1 = "path_to_first_excel.xlsx"; // 第一个 Excel 文件的路径
string filePath2 = "path_to_second_excel.xlsx"; // 第二个 Excel 文件的路径
string outputPath = "path_to_output_excel.xlsx"; // 输出 Excel 文件的路径
IWorkbook workbook1 = File.Exists(filePath1) ? GetWorkbook(filePath1) : null;
IWorkbook workbook2 = File.Exists(filePath2) ? GetWorkbook(filePath2) : null;
if (workbook1 == null || workbook2 == null)
{
Console.WriteLine("One or both Excel files could not be opened.");
return;
}
// 创建一个新的工作簿来保存合并后的内容
IWorkbook mergedWorkbook = new XSSFWorkbook();
// 遍历第一个工作簿的所有工作表
foreach (ISheet sheet in workbook1)
{
// 在新工作簿中创建一个与当前工作表同名的工作表
ISheet newSheet = mergedWorkbook.CreateSheet(sheet.SheetName);
// 复制第一个工作簿中工作表的内容到新的工作簿
CopySheetContent(sheet, newSheet);
}
// 遍历第二个工作簿的所有工作表
foreach (ISheet sheet in workbook2)
{
// 在新工作簿中创建一个与当前工作表同名的工作表
ISheet newSheet = mergedWorkbook.CreateSheet(sheet.SheetName);
// 复制第二个工作簿中工作表的内容到新的工作簿
CopySheetContent(sheet, newSheet);
}
// 保存合并后的工作簿
using (FileStream stream = new FileStream(outputPath, FileMode.Create, FileAccess.Write))
{
mergedWorkbook.Write(stream);
}
Console.WriteLine("Excel files have been merged successfully.");
}
private static void CopySheetContent(ISheet sourceSheet, ISheet destinationSheet)
{
// 复制行
for (int i = sourceSheet.FirstRowNum; i <= sourceSheet.LastRowNum; i++)
{
IRow sourceRow = sourceSheet.GetRow(i);
IRow destinationRow = destinationSheet.CreateRow(i);
if (sourceRow != null)
{
// 复制单元格
for (int j = sourceRow.FirstCellNum; j < sourceRow.LastCellNum; j++)
{
ICell sourceCell = sourceRow.GetCell(j);
ICell destinationCell = destinationRow.CreateCell(j);
if (sourceCell != null)
{
// 设置单元格内容
destinationCell.SetCellValue(sourceCell.ToString());
// 还可以复制单元格样式等,如果需要的话
// destinationCell.CellStyle = sourceCell.CellStyle;
}
}
}
}
}
private static IWorkbook GetWorkbook(string filePath)
{
IWorkbook workbook;
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
workbook = WorkbookFactory.Create(file);
}
return workbook;
}
}
这个示例程序首先加载两个 Excel 文件,然后遍历每个工作簿中的所有工作表,并将每个工作表的内容复制到新的工作簿中。请注意,如果两个 Excel 文件有相同名称的工作表,那么第二个文件的工作表将覆盖第一个文件的同名工作表。
此外,CopySheetContent 方法仅复制单元格的值。如果你还想复制单元格的样式、格式或其他属性,
本文暂时没有评论,来添加一个吧(●'◡'●)