利用NPOI拆分工作薄
时间: 2023-10-03 12:06:55 浏览: 203
您可以使用 NPOI 库来利用 C# 拆分 Excel 工作薄。以下是一个示例代码,演示如何将一个工作薄拆分成多个工作薄,每个工作薄包含指定数量的行:
```csharp
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
namespace ExcelSplitter
{
class Program
{
static void Main(string[] args)
{
string inputFile = "input.xlsx";
int rowsPerSheet = 100; //每个工作表包含的行数
//打开 Excel 文件
FileStream fileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read);
XSSFWorkbook workbook = new XSSFWorkbook(fileStream);
//获取原始工作表
ISheet originalSheet = workbook.GetSheetAt(0);
//计算拆分后的工作薄数量
int totalRows = originalSheet.LastRowNum + 1;
int totalSheets = (int)Math.Ceiling((double)totalRows / rowsPerSheet);
//循环创建新工作薄
for (int i = 1; i <= totalSheets; i++)
{
//新建工作薄
XSSFWorkbook newWorkbook = new XSSFWorkbook();
ISheet newSheet = newWorkbook.CreateSheet("Sheet1");
//复制指定行数的数据到新工作薄
int startRow = (i - 1) * rowsPerSheet;
int endRow = Math.Min(i * rowsPerSheet - 1, totalRows - 1);
for (int j = startRow; j <= endRow; j++)
{
IRow sourceRow = originalSheet.GetRow(j);
IRow destinationRow = newSheet.CreateRow(j - startRow);
for (int k = 0; k < sourceRow.LastCellNum; k++)
{
ICell sourceCell = sourceRow.GetCell(k, MissingCellPolicy.CREATE_NULL_AS_BLANK);
ICell destinationCell = destinationRow.CreateCell(k);
destinationCell.SetCellValue(sourceCell.ToString());
}
}
//保存新工作薄
string outputFileName = Path.GetFileNameWithoutExtension(inputFile) + "_" + i + ".xlsx";
using (FileStream outputStream = new FileStream(outputFileName, FileMode.Create, FileAccess.Write))
{
newWorkbook.Write(outputStream);
}
}
//释放资源
workbook.Close();
fileStream.Close();
}
}
}
```
请注意,该示例代码假定 Excel 文件的第一个工作表包含要拆分的数据。如果您的情况不同,请相应地修改代码。此外,该示例代码仅处理 XLSX 文件。如果您需要处理 XLS 文件,请使用 HSSFWorkbook 替代 XSSFWorkbook。
阅读全文