使用winform技术制作excel导入工具,读取excel表并将内容导入mysql数据库
时间: 2023-12-10 20:41:25 浏览: 248
WInform 程序 将Excel导入SQLSERVER数据库
5星 · 资源好评率100%
首先,你需要在 WinForm 中添加一个 OpenFileDialog 控件和一个 Button 控件,用于选择 Excel 文件并触发导入操作。
然后,需要安装以下 NuGet 包:
- MySql.Data
- DocumentFormat.OpenXml
接下来,你可以使用以下代码读取 Excel 文件并将其内容导入 MySQL 数据库:
```csharp
using System;
using System.Data;
using System.Windows.Forms;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using MySql.Data.MySqlClient;
namespace ExcelImporter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Excel Files|*.xlsx;*.xls";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
var connectionString = "server=localhost;database=mydatabase;uid=myusername;password=mypassword;";
var sheetName = "Sheet1";
using (var document = SpreadsheetDocument.Open(openFileDialog1.FileName, false))
{
var workbookPart = document.WorkbookPart;
var sheetPart = workbookPart.WorksheetParts.FirstOrDefault(x => x.PartName.Name == $"/xl/worksheets/{sheetName}.xml");
if (sheetPart == null)
{
throw new Exception($"Sheet '{sheetName}' not found.");
}
var reader = OpenXmlReader.Create(sheetPart);
var dataTable = new DataTable();
while (reader.Read())
{
if (reader.ElementType == typeof(Row))
{
var row = (Row)reader.LoadCurrentElement();
if (row.RowIndex == 1)
{
foreach (var cell in row.Descendants<Cell>())
{
var column = new DataColumn(GetCellValue(cell));
dataTable.Columns.Add(column);
}
}
else
{
var dataRow = dataTable.NewRow();
for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
{
var cell = row.Descendants<Cell>().ElementAt(i);
var value = GetCellValue(cell);
dataRow[i] = value;
}
dataTable.Rows.Add(dataRow);
}
}
}
using (var connection = new MySqlConnection(connectionString))
{
connection.Open();
var command = new MySqlCommand($"INSERT INTO mytable ({string.Join(", ", dataTable.Columns.Cast<DataColumn>().Select(x => x.ColumnName))}) VALUES ({string.Join(", ", dataTable.Columns.Cast<DataColumn>().Select(x => $"@{x.ColumnName}"))})", connection);
foreach (DataRow row in dataTable.Rows)
{
foreach (DataColumn column in dataTable.Columns)
{
command.Parameters.AddWithValue($"@{column.ColumnName}", row[column]);
}
command.ExecuteNonQuery();
command.Parameters.Clear();
}
}
MessageBox.Show("Import successful.");
}
}
}
private static string GetCellValue(Cell cell)
{
var value = cell.InnerText;
if (cell.DataType != null && cell.DataType == CellValues.SharedString)
{
var sharedStringTable = cell.GetFirstChild<Worksheet>().GetFirstChild<WorkbookPart>().SharedStringTablePart.SharedStringTable;
value = sharedStringTable.ElementAt(int.Parse(value)).InnerText;
}
return value;
}
}
}
```
在上面的代码中,你需要将 `mydatabase`、`myusername`、`mypassword`、`mytable` 替换为你实际使用的数据库信息和表名。
此外,你还需要根据导入的 Excel 文件中的工作表名称,将 `sheetName` 变量设置为实际名称。
最后,你可以在 Button 的 Click 事件中调用 `button1_Click` 方法来触发导入操作。
这样,你就可以使用 WinForm 技术制作 Excel 导入工具并将内容导入 MySQL 数据库了。
阅读全文