zoukankan      html  css  js  c++  java
  • 【原】winform高效导出Excel带格式设置

     
        参考网上的方法修改,1000条记录导出只要3S(1GRDM,C2.8CPU).
    1.项目添加excel对象类库的引用,Microsoft Excel 11.0 object library(不同版本的Excel,类库不同,这是2003的) 
    2.代码

      1//-***************获取要写入excel的数据源***************
      2            Dao model=new Dao();
      3            DataTable dt=model.GetFileNameList(0,intPageSize,Convert.ToDateTime(dtPFrom.Value), Convert.ToDateTime(dtPTo.Value));//取得dataGrid绑定的DataSet
      4            if(dt==nullreturn;
      5            DataGridTableStyle ts = dataGrid1.TableStyles[0];
      6
      7
      8            //-***************获取excel对象***************
      9            string saveFileName="";
     10            bool fileSaved=false;
     11            SaveFileDialog saveDialog=new SaveFileDialog();
     12            saveDialog.DefaultExt ="xls";
     13            saveDialog.Filter="Excel文件|*.xls";
     14            saveDialog.FileName ="导入记录查询结果 "+DateTime.Today.ToString("yyyy-MM-dd");
     15            saveDialog.ShowDialog();
     16            saveFileName=saveDialog.FileName;
     17            if(saveFileName.IndexOf(":")<0return//被点了取消
     18            Excel.Application xlApp=new Excel.Application();
     19            if(xlApp==null)
     20            {
     21                MessageBox.Show("无法启动Excel,可能您的机子未安装Excel");
     22                return;
     23            }

     24            Excel.Workbook workbook = xlApp.Workbooks.Add(true);
     25            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];   
     26            Excel.Range range;
     27
     28       
     29            string oldCaption=dataGrid1.CaptionText;
     30            // 列索引,行索引,总列数,总行数                   
     31            int colIndex = 0;
     32            int RowIndex = 0;
     33            int colCount = ts.GridColumnStyles.Count;
     34            int RowCount=dt.Rows.Count;
     35           
     36
     37            // *****************获取数据*********************
     38            dataGrid1.CaptionVisible = true;
     39            dataGrid1.CaptionText = "正在导出数据";
     40            // 创建缓存数据
     41            object[,] objData = new object[RowCount + 1, colCount];
     42            // 获取列标题
     43            foreach(DataGridColumnStyle cs in ts.GridColumnStyles)
     44            {
     45                objData[RowIndex,colIndex++= cs.HeaderText;   
     46            }

     47       
     48            // 获取具体数据
     49            for(RowIndex =1;RowIndex< RowCount;RowIndex++)
     50            {
     51                for(colIndex=0;colIndex < colCount;colIndex++)
     52                {               
     53                    objData[RowIndex,colIndex] =dt.Rows[RowIndex-1][colIndex+1];
     54                }

     55               
     56            }
       
     57
     58           //********************* 写入Excel*******************
     59               
     60            range = worksheet.get_Range(xlApp.Cells[2,1],xlApp.Cells[RowCount,colCount]);           
     61            range.Value2= objData;            
     62            Application.DoEvents();   
     63           
     64            //*******************设置输出格式******************************
     65             
     66            //设置顶部説明   
     67            range = worksheet.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,colCount]);
     68            range.MergeCells = true;
     69            range.RowHeight=38;
     70            range.Font.Bold=true;
     71            range.Font.Size=14;
     72            range.Font.ColorIndex=10;//字体颜色
     73            xlApp.ActiveCell.FormulaR1C1 = "导入记录查询结果";
     74
     75            //特殊数字格式
     76            range = worksheet.get_Range(xlApp.Cells[2,colCount],xlApp.Cells[RowCount,colCount]);
     77            range.NumberFormat="yyyy-MM-dd hh:mm:ss";
     78
     79            xlApp.Cells.HorizontalAlignment=Excel.Constants.xlCenter;   
     80            range = worksheet.get_Range(xlApp.Cells[2,1],xlApp.Cells[2,colCount]);
     81            range.Interior.ColorIndex = 10;//背景色
     82            range.Font.Bold = true;
     83            range.RowHeight=20;
     84            ((Excel.Range)worksheet.Cells[2,1]).ColumnWidth=25;
     85            ((Excel.Range)worksheet.Cells[2,2]).ColumnWidth=13;
     86            ((Excel.Range)worksheet.Cells[2,3]).ColumnWidth=18;
     87            ((Excel.Range)worksheet.Cells[2,4]).ColumnWidth=15;
     88            ((Excel.Range)worksheet.Cells[2,5]).ColumnWidth=22;
     89
     90            //***************************保存**********************
     91            dataGrid1.CaptionVisible = false;
     92            dataGrid1.CaptionText = oldCaption; 
     93            if(saveFileName!="")
     94            {
     95                try
     96                {
     97                    workbook.Saved =true;
     98                    workbook.SaveCopyAs(saveFileName);
     99                    fileSaved=true;
    100                }

    101                catch(Exception ex)
    102                {
    103                    fileSaved=false;
    104                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n"+ex.Message);
    105                }

    106            }

    107            else
    108            {
    109                fileSaved=false;
    110            }

    111            xlApp.Quit();
    112            GC.Collect();//强行销毁   
    113            TimeSpan dateEnd=new TimeSpan(DateTime.Now.Ticks);           
    114            TimeSpan tspan=dateBegin.Subtract(dateEnd).Duration();
    115            MessageBox.Show(tspan.ToString());
    116            if(fileSaved && File.Exists(saveFileName))
    117                System.Diagnostics.Process.Start(saveFileName);
  • 相关阅读:
    poj 1013 Counterfeit Dollar
    poj百练2973:Skew数 进制问题
    poj百练2972 进制问题
    poj2080 Calendar
    POJ 1928 The Peanuts
    EXCEL打开CSV文件乱码的解决方法
    希望博客园做个软件职业生存状态调查问卷
    Linq使用Group By [转]
    ADO.NET 从DataTable中获取某列含有的不同值的几种方式
    本该遭拒的十大科技专利:苹果滑动解锁上榜[转]
  • 原文地址:https://www.cnblogs.com/Areas/p/2627039.html
Copyright © 2011-2022 走看看