C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)

上次写了一个用文件流方式将Datatable导出Excel的方法,这个方法有局限性,比如没法对Excel进行一些增加列颜色等简单的操作,现在,给大家介绍另外一种方法,用微软的Excel类。既然要用到类,那必须是你的机子要装上Excel才行呢。

public  void DataTabletoExcel(System.Data.DataTable[] tmpDataTable,string date1,string date2)

         {

             string saveFileName = "";

                         SaveFileDialog saveDialog = new SaveFileDialog();

             saveDialog.DefaultExt = "xls";

             saveDialog.Filter = "Excel 文件|*.xls";

                        saveDialog.ShowDialog();

             saveFileName = saveDialog.FileName;

             if (saveFileName.IndexOf(":") < 0)

                   return; //被点了取消

              for (int k = 0; k < tmpDataTable.Length; k++)

             {

                 //if (k % 50 == 0)

                 //{

                     Process[] processes = Process.GetProcesses();

                     foreach (Process process in processes)

                     {

                         if (process.ProcessName == "EXCEL")

                         {

                             if (string.IsNullOrEmpty(process.MainWindowTitle))

                             {

                                 process.Kill();

                             }

                                                     }

                     }

                   //}

                 Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

                 try

                 { 

                    #region

                     if (tmpDataTable[k] == null)

                        return;

                     string name=string.Empty;

                     if (grid_Result1.GetGridView.Columns["STR_1"].Visible == false && grid_Result1.GetGridView.Columns["STR_8"].Visible == false)

                         name = tmpDataTable[k].Rows[0][0].ToString();

                     if (grid_Result1.GetGridView.Columns["STR_1"].Visible == false && grid_Result1.GetGridView.Columns["STR_8"].Visible == true)

                         name = tmpDataTable[k].Rows[0][1].ToString();

                     if (grid_Result1.GetGridView.Columns["STR_1"].Visible == true && grid_Result1.GetGridView.Columns["STR_8"].Visible == true)

                         name = tmpDataTable[k].Rows[0][2].ToString();

                     if (grid_Result1.GetGridView.Columns["STR_1"].Visible == true && grid_Result1.GetGridView.Columns["STR_8"].Visible == false)

                         name = tmpDataTable[k].Rows[0][1].ToString();

                     if (name.IndexOf("/") > -1)

                     {

                         name = name.Replace("/", " ");

                     }

                     name = name + date1 + "~" + date2;

                     saveFileName = saveFileName.Substring(0, saveFileName.LastIndexOf("\\")) + "\\" + name + ".xls";

                     int rowNum = tmpDataTable[k].Rows.Count;

                    int columnNum = tmpDataTable[k].Columns.Count;

                    int rowIndex = 1;

                    int columnIndex = 0;

                     xlApp.DefaultFilePath = "";

                     xlApp.DisplayAlerts = true;

                     xlApp.SheetsInNewWorkbook = 1;

                     Workbook xlBook = xlApp.Workbooks.Add(true);

                     //将DataTable的列名导入Excel表第一行

                    foreach (DataColumn dc in tmpDataTable[k].Columns)

                     {

                         columnIndex++;

                         xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;

                     }

                     //将DataTable中的数据导入Excel中

                    for (int i = 0; i < rowNum; i++)

                     {

                         rowIndex++;

                         columnIndex = 0;

                         for (int j = 0; j < columnNum; j++)

                         {

                             columnIndex++;

                             xlApp.Cells[rowIndex, columnIndex] = tmpDataTable[k].Rows[i][j].ToString(); 

                        }

                    }

                    if (saveFileName.IndexOf("/") > -1)

                     {

                         saveFileName = saveFileName.Replace("/", "-");

                     }

                     System.IO.File.Delete(saveFileName);

                     xlBook.SaveCopyAs(saveFileName);

                     Process[] processes1 = Process.GetProcesses();

                     foreach (Process process in processes1)

                     {

                         if (process.ProcessName == "EXCEL")

                         {

                             if (string.IsNullOrEmpty(process.MainWindowTitle))

                             {

                                 process.Kill();

                             }

                        } 

                    }

                     System.Threading.Thread.Sleep(1000);

                     #endregion

                 } 

                catch (Exception ex)

                 { 

                    XtraMessageBox.Show("导出Excel出错,原因:" + ex.Message);

                     return;

                 }

        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下代码将 C# DataTable 数据导入到 Excel : ```csharp using System.IO; using System.Data; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // DataTable 对象 DataTable dataTable = new DataTable(); // Excel 文件路径 string filePath = "D:\\data.xlsx"; // 创建 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建 Excel 工作表 ISheet sheet = workbook.CreateSheet("Sheet1"); // 创建表头行 IRow headerRow = sheet.CreateRow(0); // 设置表头 for (int i = 0; i < dataTable.Columns.Count; i++) { headerRow.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName.ToString()); } // 填充数据行 for (int i = 0; i < dataTable.Rows.Count; i++) { IRow dataRow = sheet.CreateRow(i + 1); for (int j = 0; j < dataTable.Columns.Count; j++) { dataRow.CreateCell(j).SetCellValue(dataTable.Rows[i][j].ToString()); } } // 保存 Excel 文件 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } ``` 其,`dataTable` 是需要导出DataTable 对象,`filePath` 是导出Excel 文件路径。此外,需要使用 NPOI 库,可以通过 NuGet 包管理器安装。在代码,首先创建了一个空的 Excel 工作簿和工作表,然后创建表头行,设置表头信息。接着,使用循环填充数据行,最后通过 FileStream 将 Excel 文件保存到指定路径。注意,此处使用的是 XSSFWorkbook,可以导出 xlsx 格式的 Excel 文件。如果需要导出 xls 格式的文件,需要使用 HSSFWorkbook。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值