winform选择excel文件时,combox可以获取文件中的sheet,我们选中某一个sheet,可以吧选中sheet的数据导入到数据库中;具体实现过程以及代码
时间: 2024-04-15 21:27:12 浏览: 154
下面是一个完整的示例代码,演示如何在 WinForms 中选择 Excel 文件、获取工作表并将选定工作表的数据导入到数据库中。在此示例中,我们使用了 EPPlus 库来读取 Excel 文件。
首先,您需要安装 EPPlus 库。您可以通过 NuGet 包管理器控制台执行以下命令来安装 EPPlus:
```
Install-Package EPPlus
```
然后,您可以使用以下代码来实现所需的功能:
```csharp
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using OfficeOpenXml;
namespace ExcelToDatabase
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSelectFile_Click(object sender, EventArgs e)
{
// 使用 OpenFileDialog 控件选择 Excel 文件
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 获取选中的文件路径
string filePath = openFileDialog.FileName;
// 使用 EPPlus 读取 Excel 文件
using (ExcelPackage package = new ExcelPackage(new System.IO.FileInfo(filePath)))
{
// 清空 ComboBox 中的项
comboBoxSheets.Items.Clear();
// 获取所有工作表
ExcelWorksheets worksheets = package.Workbook.Worksheets;
foreach (ExcelWorksheet worksheet in worksheets)
{
// 在 ComboBox 中添加工作表名称
comboBoxSheets.Items.Add(worksheet.Name);
}
// 设置 ComboBox 默认选中第一个工作表
if (comboBoxSheets.Items.Count > 0)
{
comboBoxSheets.SelectedIndex = 0;
}
}
}
}
private void btnImport_Click(object sender, EventArgs e)
{
if (comboBoxSheets.SelectedItem == null)
{
MessageBox.Show("请选择要导入的工作表");
return;
}
// 获取选中的工作表名称
string selectedSheet = comboBoxSheets.SelectedItem.ToString();
// 使用 EPPlus 读取选中的工作表数据
using (ExcelPackage package = new ExcelPackage(new System.IO.FileInfo(openFileDialog.FileName)))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[selectedSheet];
// 将数据存储到 DataTable
DataTable dataTable = new DataTable();
bool isFirstRowHeader = true; // 如果第一行是标题行,请将此值设置为 true
int startRow = isFirstRowHeader ? 2 : 1;
foreach (var firstRowCell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column])
{
dataTable.Columns.Add(isFirstRowHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
for (int rowNum = startRow; rowNum <= worksheet.Dimension.End.Row; rowNum++)
{
var worksheetRow = worksheet.Cells[rowNum, 1, rowNum, worksheet.Dimension.End.Column];
DataRow row = dataTable.Rows.Add();
foreach (var cell in worksheetRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
}
// 将 DataTable 中的数据导入到数据库
string connectionString = "Data Source=your_server;Initial Catalog=your_database;User ID=your_username;Password=your_password;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// 根据需要进行数据验证和处理
// 清空数据库中的表
string clearTableQuery = "TRUNCATE TABLE your_table";
using (SqlCommand command = new SqlCommand(clearTableQuery, connection))
{
command.ExecuteNonQuery();
}
// 使用 SqlBulkCopy 将数据导入数据库
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "your_table";
bulkCopy.WriteToServer(dataTable);
}
connection.Close();
}
MessageBox.Show("数据导入成功");
}
}
}
}
```
在上述代码中,您需要将以下部分替换为实际的数据库连接信息:
```csharp
string connectionString = "Data Source=your_server;Initial Catalog=your_database;User ID=your_username;Password=your_password;";
```
另外,请确保在窗体设计中添加了一个 Button 控件(名为 `btnSelectFile`),一个 ComboBox 控件(名为 `comboBoxSheets`)和另一个 Button 控件(名为 `btnImport`),并将相应的事件处理程序与按钮的 Click 事件关联。
这样,当用户单击 `btnSelectFile` 按钮时,将打开一个对话框以选择 Excel 文件,并将工作表名称加载到 `comboBoxSheets` 控件中。当用户选择要导入的工作表并单击 `btnImport` 按钮时,将读取选定工作表的数据,并将其导入到数据库中。
阅读全文