如何在C中导入Excel表格数据库?
- 行业动态
- 2025-01-14
- 4
在c#中,可以使用 microsoft.office.interop.excel库来导入excel表格数据。
在C#中导入Excel表格数据到数据库,通常需要借助第三方库如EPPlus、NPOI或者Microsoft.Office.Interop.Excel,以下是一个使用EPPlus库的详细步骤:
安装EPPlus库
你需要在你的项目中安装EPPlus库,你可以使用NuGet包管理器来安装它,打开你的NuGet包管理器控制台并运行以下命令:
Install-Package EPPlus
读取Excel文件
你需要编写代码来读取Excel文件,假设你有一个名为data.xlsx的Excel文件,其中包含一些数据。
using System; using System.Data; using System.IO; using OfficeOpenXml; namespace ExcelToDatabaseExample { class Program { static void Main(string[] args) { // 设置Excel文件路径 string filePath = @"pathtoyourdata.xlsx"; // 创建一个新的Excel包对象 FileInfo fileInfo = new FileInfo(filePath); using (ExcelPackage package = new ExcelPackage(fileInfo)) { // 获取工作表 ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // 假设我们读取第一个工作表 // 将工作表数据读取到DataTable中 DataTable dataTable = new DataTable(); bool hasHeader = true; // 根据你的Excel文件实际情况设置 var startCell = worksheet.Dimension.Start; var endCell = worksheet.Dimension.End; for (int row = startCell.Row; row <= endCell.Row; row++) { var wsRow = worksheet.Cells[row, startCell.Column, row, endCell.Column]; if (hasHeader) { foreach (var cell in wsRow) { dataTable.Columns.Add(cell.Text); } hasHeader = false; } else { var rowData = worksheet.Cells[row, startCell.Column, row, endCell.Column].Value; dataTable.Rows.Add(rowData); } } } } } }
连接数据库并插入数据
读取Excel数据后,你需要连接到目标数据库并将数据插入到相应的表中,这里以SQL Server为例:
using System; using System.Data; using System.Data.SqlClient; using OfficeOpenXml; namespace ExcelToDatabaseExample { class Program { static void Main(string[] args) { // 读取Excel数据(同上) DataTable dataTable = ReadExcelData(@"pathtoyourdata.xlsx"); // 数据库连接字符串 string connectionString = "your_connection_string_here"; string tableName = "YourTargetTable"; // 插入数据到数据库 using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = tableName; // 目标表名 try { bulkCopy.WriteToServer(dataTable); } catch (Exception ex) { Console.WriteLine("Error inserting data into Database: ", ex.Message); } } } } static DataTable ReadExcelData(string filePath) { FileInfo fileInfo = new FileInfo(filePath); using (ExcelPackage package = new ExcelPackage(fileInfo)) { ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // 假设我们读取第一个工作表 DataTable dataTable = new DataTable(); bool hasHeader = true; // 根据你的Excel文件实际情况设置 var startCell = worksheet.Dimension.Start; var endCell = worksheet.Dimension.End; for (int row = startCell.Row; row <= endCell.Row; row++) { var wsRow = worksheet.Cells[row, startCell.Column, row, endCell.Column]; if (hasHeader) { foreach (var cell in wsRow) { dataTable.Columns.Add(cell.Text); } hasHeader = false; } else { var rowData = worksheet.Cells[row, startCell.Column, row, endCell.Column].Value; dataTable.Rows.Add(rowData); } } return dataTable; } } } }
相关问答FAQs
Q1: 如果Excel文件中有多个工作表,如何处理?
A1: 你可以通过遍历所有工作表来处理多个工作表的数据,修改读取Excel数据的函数如下:
static DataTable ReadExcelData(string filePath) { FileInfo fileInfo = new FileInfo(filePath); using (ExcelPackage package = new ExcelPackage(fileInfo)) { foreach (var worksheet in package.Workbook.Worksheets) { DataTable dataTable = new DataTable(worksheet.Name); // 使用工作表名称作为DataTable的名称 bool hasHeader = true; // 根据你的Excel文件实际情况设置 var startCell = worksheet.Dimension.Start; var endCell = worksheet.Dimension.End; for (int row = startCell.Row; row <= endCell.Row; row++) { var wsRow = worksheet.Cells[row, startCell.Column, row, endCell.Column]; if (hasHeader) { foreach (var cell in wsRow) { dataTable.Columns.Add(cell.Text); } hasHeader = false; } else { var rowData = worksheet.Cells[row, startCell.Column, row, endCell.Column].Value; dataTable.Rows.Add(rowData); } } return dataTable; // 返回每个工作表的数据表 } } return null; // 如果没有工作表则返回null }
Q2: 如果Excel文件中的列名与数据库表中的列名不一致,如何处理?
A2: 你可以在读取Excel数据时进行列名映射,你可以创建一个字典来存储Excel列名和数据库列名之间的映射关系,然后在插入数据前进行列名转换,以下是示例代码:
static DataTable MapColumns(DataTable sourceTable, targetColumnMapping) { DataTable mappedTable = new DataTable(); foreach (DataColumn column in targetColumnMapping.Keys) { mappedTable.Columns.Add(column.ToString(), typeof(string)); // 根据实际类型设置列类型 } foreach (DataRow row in sourceTable.Rows) { DataRow newRow = mappedTable.NewRow(); foreach (DataColumn targetColumn in targetColumnMapping.Values) { newRow[targetColumn] = row[targetColumnMapping[targetColumn]]; } mappedTable.Rows.Add(newRow); } return mappedTable; }
在使用这个函数之前,你需要定义一个字典来存储列名映射关系:
Dictionary<string, string> columnMapping = new Dictionary<string, string>() { { "ExcelColumn1", "DatabaseColumn1" }, { "ExcelColumn2", "DatabaseColumn2" }, // 添加更多映射关系... };
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/391955.html