C# WinForms 多个 Excel 报表上传并使用 NPOI 读取数据
下面是一个使用 C# 开发 WinForms 应用程序的示例,可以上传多个 Excel 报表并使用 NPOI 库读取 Excel 报表数据。
首先,您需要将 NPOI 库添加到您的项目中。您可以通过 NuGet 包管理器来安装 NPOI 库。打开 Visual Studio,右键单击项目,选择“管理 NuGet 程序包”,然后搜索并安装“NPOI”。
然后,您可以创建一个 WinForms 窗体,包含一个“上传”按钮和一个用于显示上传的文件列表的 ListBox 控件。
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Windows.Forms;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
namespace ExcelUploader
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnUpload_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = true;
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
foreach (string fileName in openFileDialog.FileNames)
{
listBoxFiles.Items.Add(fileName);
}
}
}
private void btnReadData_Click(object sender, EventArgs e)
{
List<string> fileNames = new List<string>();
foreach (var item in listBoxFiles.Items)
{
fileNames.Add(item.ToString());
}
DataTable dataTable = ReadExcelData(fileNames);
dataGridView.DataSource = dataTable;
}
private DataTable ReadExcelData(List<string> fileNames)
{
DataTable dataTable = new DataTable();
foreach (string fileName in fileNames)
{
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(fileStream);
ISheet sheet = workbook.GetSheetAt(0);
IRow headerRow = sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
ICell cell = headerRow.GetCell(i);
if (cell != null)
{
string columnName = cell.StringCellValue;
dataTable.Columns.Add(columnName);
}
}
int rowCount = sheet.LastRowNum;
for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = dataTable.NewRow();
if (row != null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
dataRow[j] = row.GetCell(j).ToString();
}
}
}
dataTable.Rows.Add(dataRow);
}
}
}
return dataTable;
}
}
}
请注意,上述代码假定您的 Excel 报表只有一个工作表,并且数据从第二行开始。如果您的 Excel 报表结构有所不同,请相应地调整代码。
希望能对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/qr6T 著作权归作者所有。请勿转载和采集!