C#如何在WinForm中显示打开Excel文件

在C# WinForms应用程序中显示打开Excel文件的过程可以分为几个步骤:选择文件、读取文件内容、以及将内容展示给用户。为了实现这一功能,你可以使用 Microsoft.Office.Interop.Excel 库来直接操作Excel文件,或者使用第三方库如 NPOI 来避免依赖于 Microsoft Office 的安装。这里我们将采用 NPOI 库,因为它不需要安装 Excel,并且可以在任何环境中运行。

使用 NPOI 显示打开的 Excel 文件

以下是详细的步骤和示例代码,以指导你如何在 WinForms 中使用 NPOI 显示打开的 Excel 文件:

1. 安装 NPOI

首先,确保通过 NuGet 包管理器安装了 NPOI 和 NPOI.OOXML(如果你需要支持 .xlsx 文件)。

 

Shell

深色版本

Install-Package NPOI
Install-Package NPOI.OOXML
2. 创建 WinForms 用户界面

设计一个简单的 WinForms 界面,包含以下控件:

  • Button (buttonOpen) - 用于触发文件选择对话框。
  • OpenFileDialog (openFileDialog1) - 用于选择 Excel 文件。
  • DataGridView (dataGridView1) - 用于显示 Excel 文件的内容。
3. 编写代码以选择并读取 Excel 文件

编写代码来处理按钮点击事件,选择文件,并使用 NPOI 读取文件内容。然后将数据绑定到 DataGridView 控件上进行显示。

示例代码
 

Csharp

深色版本

using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // For .xlsx files
using NPOI.HSSF.UserModel; // For .xls files

namespace ExcelViewer
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void buttonOpen_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filePath = openFileDialog1.FileName;
                try
                {
                    DataTable excelData = ReadExcelFile(filePath);
                    dataGridView1.DataSource = excelData;
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error reading Excel file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private DataTable ReadExcelFile(string filePath)
        {
            IWorkbook workbook = null;
            ISheet sheet = null;
            DataTable dataTable = new DataTable();

            using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                if (Path.GetExtension(filePath) == ".xlsx")
                    workbook = new XSSFWorkbook(fileStream);
                else if (Path.GetExtension(filePath) == ".xls")
                    workbook = new HSSFWorkbook(fileStream);

                if (workbook != null)
                {
                    sheet = workbook.GetSheetAt(0); // 获取第一个工作表

                    bool isFirstRow = true;
                    foreach (var row in sheet)
                    {
                        if (isFirstRow)
                        {
                            // 如果是第一行,添加列标题到 DataTable
                            foreach (ICell cell in row.Cells)
                            {
                                dataTable.Columns.Add(cell.ToString());
                            }
                            isFirstRow = false;
                        }
                        else
                        {
                            // 否则添加数据行到 DataTable
                            DataRow dataRow = dataTable.NewRow();
                            for (int i = 0; i < row.LastCellNum; i++)
                            {
                                ICell cell = row.GetCell(i);
                                dataRow[i] = cell?.ToString() ?? string.Empty;
                            }
                            dataTable.Rows.Add(dataRow);
                        }
                    }
                }
            }

            return dataTable;
        }
    }
}
4. 设计用户界面

确保你的 WinForms 界面包含以下控件,并设置它们的属性如下:

  • Button (buttonOpen)
    • Text: 打开文件
    • Click Event: buttonOpen_Click
  • OpenFileDialog (openFileDialog1)
    • Filter: Excel Files|.xls;.xlsx
  • DataGridView (dataGridView1)
    • Dock: Fill (填充整个窗体)
5. 运行程序

编译并运行你的应用程序。当你点击“打开文件”按钮时,会弹出一个文件选择对话框,允许你选择一个 Excel 文件。一旦选择了文件,它的内容将会被加载到 DataGridView 中,并显示出来。

注意事项

  • 异常处理:始终为文件操作添加适当的异常处理,以便在出现问题时向用户提供友好的错误消息。
  • 性能考虑:对于非常大的 Excel 文件,读取速度可能会较慢。在这种情况下,可以考虑分页读取或优化数据读取逻辑。
  • 内存管理:当处理完 Excel 文件后,请确保释放所有资源(如关闭文件流),以避免潜在的内存泄漏问题。
  • 格式化:NPOI 默认将所有单元格内容转换为字符串。如果你需要保留原始格式(如日期、数字等),你需要根据单元格的数据类型进行相应的解析和格式化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值