Asp.net中Excel導出

對於asp.net 的Excel導出,有多種方法,到目前,個人認爲,利用myxls導出Excel還是比較好用的,可以很好的設置Excel的格式。。。

使用很方便,下載org.in2bits.MyXls.dll,引入命名空間即可

 

下面是一個使用代碼示例:

 

private void ExcelExport(IList< LineLossInfo > lossListExcel)

    {

        XlsDocument xls = new XlsDocument();

        xls.FileName = "LineLossMonthDetail.xls";//指定文件名

 

        Worksheet sheet = xls.Workbook.Worksheets.Add("LineLossMonthDetail");

        #region 設置各數據列的大小

        ColumnInfo colInfo1 = new ColumnInfo(xls, sheet);

        colInfo1.ColumnIndexStart = 0;

        colInfo1.ColumnIndexEnd = 1;

        colInfo1.Width = 15 * 256;

        sheet.AddColumnInfo(colInfo1);

 

        ColumnInfo colInfo2 = new ColumnInfo(xls, sheet);

        colInfo2.ColumnIndexStart = 2;

        colInfo2.ColumnIndexEnd = 2;

        colInfo2.Width = 15 * 256;

        sheet.AddColumnInfo(colInfo2);

 

        ColumnInfo colInfo3 = new ColumnInfo(xls, sheet);

        colInfo3.ColumnIndexStart = 3;

        colInfo3.ColumnIndexEnd = 3;

        colInfo3.Width = 15 * 256;

        sheet.AddColumnInfo(colInfo3);

 

        ColumnInfo colInfo4 = new ColumnInfo(xls, sheet);

        colInfo4.ColumnIndexStart = 4;

        colInfo4.ColumnIndexEnd = 4;

        colInfo4.Width = 15 * 256;

        sheet.AddColumnInfo(colInfo4);

 

        ColumnInfo colInfo5 = new ColumnInfo(xls, sheet);

        colInfo5.ColumnIndexStart = 5;

        colInfo5.ColumnIndexEnd = 5;

        colInfo5.Width = 32 * 256;

        sheet.AddColumnInfo(colInfo5);

        #endregion

 

        Cells cells = sheet.Cells;

 

        #region 合併單元格,得到報表標題

        MergeArea maTitle = new MergeArea(1, 2, 1, 6);

        sheet.AddMergeArea(maTitle);

        XF xfTitle = xls.NewXF();

        xfTitle.HorizontalAlignment = HorizontalAlignments.Centered;

        xfTitle.VerticalAlignment = VerticalAlignments.Centered;

        xfTitle.Font.FontName = "宋體";

        xfTitle.Font.Height = 16 * 20;

        xfTitle.Font.Bold = true;

        cells.Add(1, 1, divDataHeader.InnerText, xfTitle);

        #endregion

 

        MergeArea maTime1 = new MergeArea(3, 3, 1, 6);

        sheet.AddMergeArea(maTime1);

        XF xfTopBar = xls.NewXF();

        xfTopBar.Font.FontName = "宋體";

        cells.Add(3, 1, divDataCondition.InnerText, xfTopBar);

 

        #region 設置Excel數據列標題的格式

        XF xfDataHead = xls.NewXF();

        xfDataHead.HorizontalAlignment = HorizontalAlignments.Centered;

        xfDataHead.VerticalAlignment = VerticalAlignments.Centered;

        xfDataHead.Font.FontName = "宋體";

        xfDataHead.Font.Bold = true;

        xfDataHead.UseBorder = true;

        xfDataHead.BottomLineStyle = 1;

        xfDataHead.BottomLineColor = Colors.Black;

        xfDataHead.TopLineStyle = 1;

        xfDataHead.TopLineColor = Colors.Black;

        xfDataHead.LeftLineStyle = 1;

        xfDataHead.LeftLineColor = Colors.Black;

        xfDataHead.RightLineStyle = 1;

        xfDataHead.RightLineColor = Colors.Black;

        #endregion

 

        #region 添加列標題

        cells.Add(4, 1, "日期", xfDataHead);

        cells.Add(4, 2, "供電量", xfDataHead);

        cells.Add(4, 3, "用電量", xfDataHead);

        cells.Add(4, 4, "損失量", xfDataHead);

        cells.Add(4, 5, "損失率", xfDataHead);

        cells.Add(4, 6, "說明", xfDataHead);

        #endregion

 

        #region 設置各數據列的格式

        XF xfData = xls.NewXF();

        xfData.Font.FontName = "宋體";

        xfData.UseBorder = true;

        xfData.BottomLineStyle = 1;

        xfData.BottomLineColor = Colors.Black;

        xfData.TopLineStyle = 1;

        xfData.TopLineColor = Colors.Black;

        xfData.LeftLineStyle = 1;

        xfData.LeftLineColor = Colors.Black;

        xfData.RightLineStyle = 1;

        xfData.RightLineColor = Colors.Black;

        #endregion

 

        #region 填充數據

        int i = 5;//從第五行開始爲數據行

        double provideTotal = 0;

        double useTotal = 0;

        double lossTotal = 0;

        foreach(LineLossInfo lossItem in lossListExcel)

        {

            cells.Add(i,1,lossItem.Date,xfData);

 

            if (Double.IsNaN(lossItem.ProvideValue))

                cells.Add(i, 2, "-", xfData);

            else

            {

                cells.Add(i, 2, lossItem.ProvideValue, xfData);

                provideTotal += lossItem.ProvideValue;

            }

 

            if (Double.IsNaN(lossItem.UseValue))

                cells.Add(i, 3, "-", xfData);

            else

            {

                cells.Add(i, 3, lossItem.UseValue, xfData);

                useTotal += lossItem.UseValue;

            }

 

            if (Double.IsNaN(lossItem.LossValue))

                cells.Add(i, 4, "-", xfData);

            else

            {

                cells.Add(i, 4, lossItem.LossValue, xfData);

                lossTotal += lossItem.LossValue;

            }

 

            if(Double.IsNaN(lossItem.LossRate))

                cells.Add(i,5,"-",xfData);

            else

                cells.Add(i,5,lossItem.LossRate,xfData);

 

            if(String.IsNullOrEmpty(lossItem.Info))

                cells.Add(i,6,"-",xfData);

            else

                cells.Add(i,6,lossItem.Info,xfData);

            i++;

        }

        //添加總計

        cells.Add(i, 2, "總計:", xfData);

        cells.Add(i, 3, provideTotal, xfData);

        cells.Add(i, 4, useTotal, xfData);

        cells.Add(i, 5, lossTotal, xfData);

        #endregion

        //發送到客戶端

        xls.Send();

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章