• C#导出Excel


    最近在做C#导出excel,虽然以也做过,但是数据量没有现在这么多的。

    第一种方法就是以后组件的方式来做:

      //public static void OutExcel(List<SubStationRealtimedata> listData, string str)
            //{
            //     Microsoft.Office.Interop.Excel.Application excelApp = new Application();
            //     Microsoft.Office.Interop.Excel.Workbook wbook = null;
            //     Microsoft.Office.Interop.Excel.Sheets sheets =null;
            //     Microsoft.Office.Interop.Excel.Worksheet wkSheet = null;
    
            //     Microsoft.Office.Interop.Excel.Range range = null;
            //     Microsoft.Office.Interop.Excel.Range rangeWire = null;
    
            //     wbook = excelApp.Workbooks.Add(true);
            //     sheets = wbook.Worksheets;
            //     wkSheet = (Worksheet)sheets.get_Item(1);
    
            //     System.Windows.Forms.Application.DoEvents();
    
            //     range = wkSheet.get_Range("A1", Missing.Value);
            //     rangeWire = wkSheet.get_Range("B1", Missing.Value);
            //     range.Value2 = "浙江";
            //     rangeWire.Value2 = "某某线";
    
            //     wkSheet.Cells[4, 1] = "时间";
            //     for (int i = 0; i < arrayList.Count; i++)
            //     {
            //         wkSheet.Cells[4, i + 2] = arrayList[i];
            //         int j=5;
            //         foreach(SubStationRealtimedata subdata in listData)
            //         {
            //             wkSheet.Cells[j, 1] = subdata.SendTime;
            //             wkSheet.Cells[j, i + 2] = subdata.CurrentPhaseA;
                         
            //             j++;
            //         }
                    
            //     }
    
    
            //     wbook.Close();
    
            //     excelApp.Quit();
    
            //}
    

     由于以上种方法速度太慢,后来经过园子的网友推荐用npoi,这种流的方式效率非常高,网上先下载npoi组件。

      SaveFileDialog dialog = new SaveFileDialog();
                dialog.Filter = "Excel文件|*.xls";
                if (dialog.ShowDialog() == DialogResult.No)
                {
                    
                }
    
                string filename = dialog.FileName;
                HSSFWorkbook workbook = new HSSFWorkbook();
                ISheet sheet = workbook.CreateSheet("数据");
                //列表头
                IRow rowheader = sheet.CreateRow(4);
                //这里必须固定
                rowheader.CreateCell(0, CellType.String).SetCellValue("时间");
                for (int i = 1; i <= arrayList.Count; i++)
                {
                    rowheader.CreateCell(i, CellType.String).SetCellValue(arrayList[i-1].ToString());
                }
    
                ArrayList arrayListData = null;
    
                //内容
                int j = 5;
                foreach (SubStationRealtimedata subdata in listData)
                {
    
                    #region 先放入一个arraylist
                    arrayListData = new ArrayList();
                    if (pexcel != null)
                    {
                        if (pexcel.PCurrentA)
                        {
                            arrayListData.Add(subdata.CurrentPhaseA);
                        }
                        if (pexcel.PCurrentB)
                        {
                            arrayListData.Add(subdata.CurrentPhaseB);
                        }
                        if (pexcel.PCurrentC)
                        {
                            arrayListData.Add(subdata.CurrentPhaseB);
                        }
                        if (pexcel.PVoltageA)
                        {
                            arrayListData.Add(subdata.CurrentPhaseB);
                        }
                        if (pexcel.PVoltageB)
                        {
                            arrayListData.Add(subdata.CurrentPhaseB);
                        }
                        if (pexcel.PVoltageC)
                        {
                            arrayListData.Add(subdata.CurrentPhaseB);
                        }
                        if (pexcel.PharmonicPrecent3)
                        {
                            arrayListData.Add(subdata.harmonicPrecent3);
                        }
                        if (pexcel.PharmonicPrecent5)
                        {
                            arrayListData.Add(subdata.harmonicPrecent5);
                        }
                        if (pexcel.PharmonicPrecent7)
                        {
                            arrayListData.Add(subdata.harmonicPrecent7);
                        }
                        if (pexcel.PharmonicPrecent9)
                        {
                            arrayListData.Add(subdata.harmonicPrecent9);
                        }
                        if (pexcel.PharmonicPrecent11)
                        {
                            arrayListData.Add(subdata.harmonicPrecent11);
                        }
                        if (pexcel.PharmonicPrecent13)
                        {
                            arrayListData.Add(subdata.harmonicPrecent13);
                        }
                        if (pexcel.PActive)
                        {
                            arrayListData.Add(subdata.Active);
                        }
                        if (pexcel.PReactive)
                        {
                            arrayListData.Add(subdata.Reactive);
                        }
                    }
                    #endregion
    
                    IRow rowcontent = sheet.CreateRow(j);
                    rowcontent.CreateCell(0, CellType.String).SetCellValue(subdata.SendTime);
                    for (int i = 1; i <= arrayListData.Count; i++)
                    {
                        rowcontent.CreateCell(i, CellType.String).SetCellValue(arrayListData[i-1].ToString());
                    }
                    j++;
                }
    
    
           //最后输出流就可以了。呵呵!非常方便。
                using (Stream stream = File.OpenWrite(filename))
                {
                    workbook.Write(stream);
                }
    

      

  • 相关阅读:
    VS2019调试 asp.net core 2.2 出现《ANCM In-Process Handler Load Failure 发布后启动错误处理》处理
    网页上显示数学公式的三种方案
    FileStream实现多线程断点续传(已封装)
    绝对定位不脱离文档流的方法
    百度地图InfoWindow弹窗圆角
    并发:线程池异步执行与创建单独的线程执行
    互斥锁和自旋锁的区别
    事务的特性和隔离级别
    线程不安全与线程安全示例
    多线程过去与现在
  • 原文地址:https://www.cnblogs.com/Anders888/p/3569317.html
Copyright © 2020-2023  润新知