一、引言
在 Windows 桌面應(yīng)用開(kāi)發(fā)中,WinForm 是一種常見(jiàn)且強(qiáng)大的技術(shù)。而在許多業(yè)務(wù)場(chǎng)景下,需要從 Excel 文件中讀取數(shù)據(jù),例如數(shù)據(jù)分析、數(shù)據(jù)導(dǎo)入等。本文將詳細(xì)介紹如何在 WinForm 應(yīng)用程序中實(shí)現(xiàn)打開(kāi)并導(dǎo)入 Excel 文件,以及讀取其中的數(shù)據(jù)。
二、實(shí)現(xiàn)思路
要在 WinForm 中實(shí)現(xiàn)打開(kāi)并讀取 Excel 文件,主要步驟如下:
- 提供文件選擇界面:使用
OpenFileDialog
控件讓用戶(hù)選擇要打開(kāi)的 Excel 文件。 - 選擇合適的庫(kù)讀取 Excel:這里我們使用
Microsoft.Office.Interop.Excel
或 EPPlus
庫(kù),Microsoft.Office.Interop.Excel
需要安裝 Microsoft Office,而 EPPlus
是一個(gè)開(kāi)源庫(kù),無(wú)需安裝 Office。本文將分別介紹這兩種方法。 - 讀取 Excel 文件內(nèi)容:將 Excel 文件中的數(shù)據(jù)讀取出來(lái),并在界面上顯示或進(jìn)行后續(xù)處理。
三、使用 Microsoft.Office.Interop.Excel
實(shí)現(xiàn)
1. 創(chuàng)建 WinForm 項(xiàng)目
打開(kāi) Visual Studio,創(chuàng)建一個(gè)新的 C# WinForm 應(yīng)用程序項(xiàng)目。
2. 添加引用
在項(xiàng)目中添加對(duì) Microsoft.Office.Interop.Excel
的引用。可以通過(guò)“項(xiàng)目” -> “添加引用” -> “COM”,找到“Microsoft Excel XX.0 Object Library”(XX 為 Office 版本號(hào))并添加。
3. 設(shè)計(jì)界面
在窗體上添加一個(gè) Button
控件用于觸發(fā)文件選擇對(duì)話框,添加一個(gè) DataGridView
控件用于顯示讀取的數(shù)據(jù)。
4. 編寫(xiě)代碼
using System;
using System.Data;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace ExcelImportWinForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
DataTable dataTable = ReadExcelWithInterop(filePath);
dataGridView1.DataSource = dataTable;
}
}
private DataTable ReadExcelWithInterop(string filePath)
{
DataTable dataTable = new DataTable();
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Open(filePath);
Excel.Worksheet worksheet = workbook.Sheets[1];
Excel.Range range = worksheet.UsedRange;
// 添加列
for (int col = 1; col <= range.Columns.Count; col++)
{
dataTable.Columns.Add(range.Cells[1, col].Value2.ToString());
}
// 添加行
for (int row = 2; row <= range.Rows.Count; row++)
{
DataRow dataRow = dataTable.NewRow();
for (int col = 1; col <= range.Columns.Count; col++)
{
dataRow[col - 1] = range.Cells[row, col].Value2;
}
dataTable.Rows.Add(dataRow);
}
workbook.Close(false);
excelApp.Quit();
return dataTable;
}
}
}
5. 代碼解釋
- 文件選擇:使用
OpenFileDialog
讓用戶(hù)選擇 Excel 文件。 - 讀取 Excel:通過(guò)
Microsoft.Office.Interop.Excel
打開(kāi) Excel 文件,獲取工作表和使用范圍。 - 數(shù)據(jù)處理:將 Excel 中的數(shù)據(jù)逐行逐列讀取到
DataTable
中,最后將 DataTable
綁定到 DataGridView
上顯示。
四、使用 EPPlus
實(shí)現(xiàn)
1. 安裝 EPPlus
庫(kù)
通過(guò) NuGet 包管理器搜索 EPPlus
并安裝到項(xiàng)目中。
2. 編寫(xiě)代碼
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
using OfficeOpenXml;
namespace ExcelImportWinForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
DataTable dataTable = ReadExcelWithEPPlus(filePath);
dataGridView1.DataSource = dataTable;
}
}
private DataTable ReadExcelWithEPPlus(string filePath)
{
DataTable dataTable = new DataTable();
using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
if (worksheet.Dimension != null)
{
// 添加列
for (int col = 1; col <= worksheet.Dimension.End.Column; col++)
{
dataTable.Columns.Add(worksheet.Cells[1, col].Value?.ToString());
}
// 添加行
for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
{
DataRow dataRow = dataTable.NewRow();
for (int col = 1; col <= worksheet.Dimension.End.Column; col++)
{
dataRow[col - 1] = worksheet.Cells[row, col].Value;
}
dataTable.Rows.Add(dataRow);
}
}
}
return dataTable;
}
}
}
3. 代碼解釋
- 文件選擇:同樣使用
OpenFileDialog
讓用戶(hù)選擇 Excel 文件。 - 讀取 Excel:使用
EPPlus
打開(kāi) Excel 文件,獲取工作表和單元格范圍。 - 數(shù)據(jù)處理:將 Excel 中的數(shù)據(jù)逐行逐列讀取到
DataTable
中,最后將 DataTable
綁定到 DataGridView
上顯示。
五、兩種方法對(duì)比
- **
Microsoft.Office.Interop.Excel
**:優(yōu)點(diǎn)是功能強(qiáng)大,能直接調(diào)用 Excel 的各種功能;缺點(diǎn)是需要安裝 Microsoft Office,部署環(huán)境受限,且性能相對(duì)較低。 - **
EPPlus
**:優(yōu)點(diǎn)是開(kāi)源、無(wú)需安裝 Office,性能較好,部署方便;缺點(diǎn)是功能相對(duì) Microsoft.Office.Interop.Excel
可能不夠全面。
六、總結(jié)
通過(guò)以上兩種方法,我們可以在 WinForm 應(yīng)用程序中實(shí)現(xiàn)打開(kāi)并導(dǎo)入 Excel 文件,讀取其中的數(shù)據(jù)。開(kāi)發(fā)者可以根據(jù)實(shí)際需求和部署環(huán)境選擇合適的方法。無(wú)論是使用 Microsoft.Office.Interop.Excel
還是 EPPlus
,都能滿足基本的 Excel 數(shù)據(jù)讀取需求,為后續(xù)的數(shù)據(jù)處理和分析提供基礎(chǔ)。
閱讀原文:原文鏈接
該文章在 2025/2/8 10:20:47 編輯過(guò)