从 C# SQL 创建 Excel 文件

Posted

技术标签:

【中文标题】从 C# SQL 创建 Excel 文件【英文标题】:Create Excel file from C# SQL 【发布时间】:2020-06-04 05:16:30 【问题描述】:

我有一个 ASP.NET Web 应用程序,我在其中导入 Excel 文件 (.xlsx) 并将数据存储在数据库中。

这是我读取 Excel 文件的代码:

private void ImportBulkRegistraion(HttpContext context) 

 if (context.Request.Files.Count > 0) 
 
  HttpFileCollection files = context.Request.Files;
  HttpPostedFile MyFile = files[0];

  DataTable dt = new DataTable();
  using(var excel = new ExcelPackage(MyFile.InputStream)) 
  
   //loop for all of sheets
   for (int sheetcount = 1; sheetcount <= 1; sheetcount++) 
   
    ExcelWorksheet worksheet = excel.Workbook.Worksheets[sheetcount];
    ExcelCellAddress startCell = worksheet.Dimension.Start;
    ExcelCellAddress endCell = worksheet.Dimension.End;

    // place all the data into DataTable
    for (int row = startCell.Row; row <= endCell.Row; row++) 
    
     if (row == 1) 
     
      //Add columns
      if (sheetcount == 1)
       for (int col = startCell.Column; col <= endCell.Column; col++)
        dt.Columns.Add(worksheet.Cells[row, col].Value.ToString());
      
     else
     
      //Add Rows
      DataRow dr = dt.NewRow();
      int x = 0;
      for (int col = startCell.Column; col <= endCell.Column; col++)
       dr[x++] = worksheet.Cells[row, col].Value;
      dt.Rows.Add(dr);
     
    
   
  
  ExportUserToDB(dt);
 

//ExportUserToDB(dt); 函数调用存储过程,我在其中将行插入数据库。

我想生成一个 Excel 文件,如果输入 Excel 文件中的任何行无法处理,相同的行将存储在这个新创建的 Excel 文件中(格式相同),可以手动修复然后再次重新处理。

例如:如果一行有名称列的名称为“O'Mac”,则不会被 SQL 处理。这是一个失败的行,应该插入到新创建的 Excel 文件中。

【问题讨论】:

看起来很可行,首先添加一个try-catch。但是您是否尝试过为根本问题找到解决方案? 听起来您要求我们为您编写代码。 Stack Overflow 不适合那样做。 【参考方案1】:

    创建一个专用于异常的 DataTable 对象,例如:

    DataTable dtException = new DataTable();

    在 dtException 中添加所有失败的 DataRows

    编写一个方法,例如WriteException() 并通过 dtException 在 Excel 工作表中写入所有异常:

私人无效WriteException(数据表dt) 使用 (ExcelPackage excel = new ExcelPackage()) excel.Workbook.Worksheets.Add("例外"); var worksheet = excel.Workbook.Worksheets["Exceptions"]; worksheet.Cells["A1"].LoadFromDataTable(dt,false); FileInfo excelFile = new FileInfo(@"C:\Temp\AllExceptions.xlsx"); excel.SaveAs(excelFile);

【讨论】:

以上是关于从 C# SQL 创建 Excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 从 DataSet 创建包含多个工作表的 excel 文件

C#:Datagrid 到 Excel .Cell 边框在创建的 excel 文件中丢失

从 xls (Excel) 文件创建 SQL 表

用C#做Excel文件导入SQL不成功

如何使用 C# 将数据表从 SQL Server 转换为 Excel [重复]

使用 C# 将 Excel 文件导入 Microsoft SQL Server