在C#中将数据库输出成Excel文件是一个常见的需求,尤其是在数据报表和数据分析的场景中,以下是详细的步骤和代码示例,帮助你实现这一功能。
确保你已经安装了必要的NuGet包:
System.Data.SqlClient
(用于连接SQL Server数据库)
EPPlus
(用于生成Excel文件)
你可以通过以下命令安装这些包:
Install-Package System.Data.SqlClient Install-Package EPPlus
假设我们有一个SQL Server数据库,并且我们要从中读取数据,我们需要编写代码来连接到数据库并执行查询。
using System; using System.Data.SqlClient; using System.Data; class Program { static void Main() { string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string query = "SELECT * FROM MyTable"; SqlCommand command = new SqlCommand(query, connection); SqlDataAdapter adapter = new SqlDataAdapter(command); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "MyTable"); // Now we have the data in dataSet, let's export it to Excel. ExportToExcel(dataSet, "MyTable", "output.xlsx"); } } }
我们将使用EPPlus库将数据集导出到Excel文件中。
using OfficeOpenXml; using System.IO; class ExcelExporter { public static void ExportToExcel(DataSet dataSet, string tableName, string filePath) { using (ExcelPackage package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(tableName); worksheet.Cells[1, 1].LoadFromDataTable((DataTable)dataSet.Tables[tableName], true); // AutoFit columns for (int col = 1; col <= worksheet.Dimension.End.Column; col++) { worksheet.Column(col).AutoFit(); } // Save the file FileInfo fi = new FileInfo(filePath); package.SaveAs(fi); } } }
将以上两部分代码整合在一起,形成一个完整的程序:
using System; using System.Data.SqlClient; using System.Data; using OfficeOpenXml; using System.IO; class Program { static void Main() { string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string query = "SELECT * FROM MyTable"; SqlCommand command = new SqlCommand(query, connection); SqlDataAdapter adapter = new SqlDataAdapter(command); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "MyTable"); // Export the data to an Excel file ExportToExcel(dataSet, "MyTable", "output.xlsx"); } } static void ExportToExcel(DataSet dataSet, string tableName, string filePath) { using (ExcelPackage package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(tableName); worksheet.Cells[1, 1].LoadFromDataTable((DataTable)dataSet.Tables[tableName], true); // AutoFit columns for (int col = 1; col <= worksheet.Dimension.End.Column; col++) { worksheet.Column(col).AutoFit(); } // Save the file FileInfo fi = new FileInfo(filePath); package.SaveAs(fi); } } }
Q1: 如果数据库表包含大量数据,如何优化导出性能?
A1: 对于大数据集,可以考虑分批次读取数据并写入Excel文件,可以使用多线程或异步操作来提高性能,还可以调整数据库查询,只选择需要的列,减少数据传输量。
Q2: 如何处理Excel中的单元格格式和样式?
A2: EPPlus提供了丰富的API来设置单元格的格式和样式,你可以使用worksheet.Cells[row, col].Style.Font.Bold = true;
来设置字体加粗,或者使用worksheet.Cells[row, col].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
来设置单元格背景颜色,具体可以参考EPPlus的官方文档。
通过本文的介绍,你应该已经掌握了如何在C#中将数据库数据导出到Excel文件的基本方法,无论是简单的数据报表还是复杂的数据分析任务,掌握这一技能都能大大提高你的工作效率,如果你有任何疑问或需要进一步的帮助,欢迎随时留言讨论!