使用 Epplus 在 C# 中对 Excel 进行 SQL 查询

Posted

技术标签:

【中文标题】使用 Epplus 在 C# 中对 Excel 进行 SQL 查询【英文标题】:SQL Query to Excel in C# using Epplus 【发布时间】:2021-05-23 18:24:56 【问题描述】:

我一直在努力解决这个问题。 我正在尝试将 sql 查询中的字符串和列名写入 excel 文档。 但我只写了行。如何修复代码以编写所有行和列?

            var Template = new FileInfo(@"C:\Temp\XLS\New.xlsx");
            var xlPackage = new ExcelPackage(Template);
            var wsCards = xlPackage.Workbook.Worksheets.Add(NAME_WORKSHEET);
            using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
            
                sqlConn.Open();
                using (SqlCommand command = new SqlCommand(SQL_WORKSHEET, sqlConn))
                
                    var reader = command.ExecuteReader();
                    int row = 1;

                    DataTable schemaTable = reader.GetSchemaTable();
                    foreach (DataRow rw in schemaTable.Rows)
                    
                        foreach (DataColumn column in schemaTable.Columns)
                        
                            if (column.ColumnName == "ColumnName")
                            
                                wsCards.Cells["A1"].Value = rw[column];
                            
                        
                    
                    while (reader.Read())
                    
                        row++;
                        for (int col = 1; col <= reader.FieldCount; col++)
                        
                            wsCards.Cells[row, col].Value = reader.GetValue(col - 1);
                        
                    
                    xlPackage.SaveAs(Template);
                    xlPackage.Dispose();
                
            

【问题讨论】:

【参考方案1】:

            var Template = new FileInfo(@"C:\Temp\XLS\New.xlsx");
            var xlPackage = new ExcelPackage(Template);
            var wsCards = xlPackage.Workbook.Worksheets.Add(NAME_WORKSHEET);
            using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
            
                sqlConn.Open();
                using (SqlCommand command = new SqlCommand(SQL_WORKSHEET, sqlConn))
                
                    var reader = command.ExecuteReader();
                    int row = 1,col=1;


                    DataTable schemaTable = reader.GetSchemaTable();
                    //foreach (DataRow rw in schemaTable.Rows)
                    //
                        // Write the headers to the first row
                        foreach (DataColumn column in schemaTable.Columns)
                        
                             // Condition Will only be required if you want to write 
                            // specific column names
                            //if (column.ColumnName == "ColumnName")
                            // 
                            
                                wsCards.Cells[1,col].Value = rw[column].ColumnName;
                                col++;
                            //
                        
                    //
                    while (reader.Read())
                    
                        row++;
                        for ( col = 1; col <= reader.FieldCount; col++)
                        
                            wsCards.Cells[row, col].Value = reader.GetValue(col - 1);
                        
                    
                    xlPackage.SaveAs(Template);
                    xlPackage.Dispose();
                
            

此代码会将架构中的标题写入 excel 表的第一行

【讨论】:

以上是关于使用 Epplus 在 C# 中对 Excel 进行 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 epplus 中使用 c# 为 excel 中的整个列着色?

C# 使用Epplus导出数据到Excel

.NET Core(C#) EPPlus读取Excel(.xlsx)文件的方法及示例代码

.NET Core(C#) EPPlus写入保存Excel(.xlsx)文件的方法及示例代码

.NET Core(C#) EPPlus创建Excel(.xlsx)写入数据的方法及示例代码

c# EPPlus 修改后关闭期间 Excel 提示保存