zoukankan      html  css  js  c++  java
  • 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;

                     }

            }

  • 相关阅读:
    NOI2015 品酒大会
    BJOI2017 喷式水战改
    代码注释
    mysql zip 安装 和 修改密码
    Jrebel 永久免费激活步骤
    layui 在springboot2.x 时,页面展示不了layui的问题
    最小生成树
    loj 10117 简单题(cqoi 2006)
    vijos 1512 SuperBrother打鼹鼠
    vijos 清点人数
  • 原文地址:https://www.cnblogs.com/dogxuefeng/p/2439155.html
Copyright © 2011-2022 走看看