下面是一个使用 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 报表结构有所不同,请相应地调整代码。

希望能对您有所帮助!

C# WinForms 多个 Excel 报表上传并使用 NPOI 读取数据

原文地址: https://www.cveoy.top/t/topic/qr6T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录