Asp.Net使用org.in2bits.MyXls.dll操作excel的應用


首先下載org.in2bits.MyXls.dll(自己的在~\About ASP.Net\Asp.Net操作excel)

添加命名空間:

using org.in2bits.MyXls;
using System.IO;

思路:

 添加引用 (using org.in2bits.MyXls)→  創建空xls文檔(XlsDocument) → 得到數據 →  創建一個工作頁(Worksheet) →  設置xls文檔的指定工作頁的行(RowInfo) →  設置xls文檔的指定工作頁的列(ColumnInfo) →  創建列樣式創建列時引用(XF) → 列位置排好 →  增加數據(ws.Cells.Add) 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using org.in2bits.MyXls;
using System.Web;
using System.IO;

namespace LowProtetction.Bizlogic
{
    public class DB_CommunityInfo
    {
        /// <summary>
        /// 自定義導出
        /// </summary>
        /// <param name="Condition">查詢條件</param>
        public static void DaoChuExecl( string therCondtion)
        {
            string filename = "自定義導出";
            DataView dv = null;
            XlsDocument doc = new XlsDocument(); //創建空xls文檔
            string strSql = "select BelongCity,CommunityCode,CommunityName,CommunityAddress,Remark,AddUserName from CommunityInfo where 1=1 " + therCondtion + "";
            dv = Epoint.MisBizLogic2.DB.ExecuteDataView(strSql);
            ExcelExport(filename,dv.ToTable(), doc, 2, 1);


            doc.FileName = HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
            doc.Send();
        }
        private static void ExcelExport(string workSheetName, DataTable dt, XlsDocument xls, int startrow, int displaynum) 
        {

            //創建一個工作頁為Dome   
            Worksheet ws = xls.Workbook.Worksheets.Add(workSheetName);

            #region  設置xls文檔的指定工作頁的行屬性
            RowInfo rol1top1 = new RowInfo();
            rol1top1.RowHeight = 50 * 20;
            rol1top1.RowIndexStart = 0;
            rol1top1.RowIndexEnd = 1;
            ws.AddRowInfo(rol1top1);

            RowInfo rol1top2 = new RowInfo();
            rol1top2.RowHeight = 24 * 20;
            rol1top2.RowIndexStart = 2;
            rol1top2.RowIndexEnd = (ushort)(dt.Rows.Count + 5); //到最后一行
            ws.AddRowInfo(rol1top2); 
            #endregion

            #region   設置xls文檔的指定工作頁的列屬性 
            //所屬城市 1  
            ColumnInfo colInfo0 = new ColumnInfo(xls, ws);
            colInfo0.ColumnIndexStart = 0;
            colInfo0.ColumnIndexEnd = 1;
            colInfo0.Width = 15 * 256;
            ws.AddColumnInfo(colInfo0);

            //社區編號
            ColumnInfo colInfo1 = new ColumnInfo(xls, ws);
            colInfo1.ColumnIndexStart = 1;
            colInfo1.ColumnIndexEnd = 2;
            colInfo1.Width = 15 * 256;
            ws.AddColumnInfo(colInfo1);

            //名稱
            ColumnInfo colInfo12 = new ColumnInfo(xls, ws);
            colInfo12.ColumnIndexStart = 2;
            colInfo12.ColumnIndexEnd = 3;
            colInfo12.Width = 15 * 256;
            ws.AddColumnInfo(colInfo12);
            //社區地址
            ColumnInfo colInfo2 = new ColumnInfo(xls, ws);
            colInfo2.ColumnIndexStart = 3;
            colInfo2.ColumnIndexEnd = 4;
            colInfo2.Width = 15 * 256;
            ws.AddColumnInfo(colInfo2);

            // 社區介紹
            ColumnInfo colInfo3 = new ColumnInfo(xls, ws);
            colInfo3.ColumnIndexStart = 4;
            colInfo3.ColumnIndexEnd = 5;
            colInfo3.Width = 15 * 256;
            ws.AddColumnInfo(colInfo3);


            //登記人
            ColumnInfo colInfo6 = new ColumnInfo(xls, ws);
            colInfo6.ColumnIndexStart = 5;
            colInfo6.ColumnIndexEnd = 7;
            colInfo6.Width = 15 * 256;
            ws.AddColumnInfo(colInfo6); 
             
            #endregion 

            #region 創建列樣式創建列時引用
            XF xfhead = xls.NewXF();
            xfhead.HorizontalAlignment = HorizontalAlignments.Centered;
            xfhead.VerticalAlignment = VerticalAlignments.Centered;
            xfhead.Font.Bold = false;
            xfhead.Font.FontName = "宋體";
            xfhead.Font.Height = 16 * 20;
            //自動換行
            xfhead.TextWrapRight = true;
            #endregion
            #region Excel導出的頭 
            //Worksheet,單元格樣式,列名,開始行,開始列,結束行,結束列
             MergeRegion(ref ws, xfhead, "自定義導出", 1, 1, 1, dt.Columns.Count);
            #endregion

             #region 創建單元格樣式
             //第一種單元格樣式
             XF xf = xls.NewXF();
             xf.HorizontalAlignment = HorizontalAlignments.Centered;
             xf.VerticalAlignment = VerticalAlignments.Centered;
             xf.Pattern = 1;////設定單元格填充風格。如果設定為0,則是純色填充
             xf.PatternColor = Colors.White;//設定填充線條的顏色 
             xf.UseBorder = true;
             //設置列的上下左右的樣式
             xf.TopLineStyle = 1;
             xf.TopLineColor = Colors.Black;
             xf.BottomLineStyle = 1;
             xf.BottomLineColor = Colors.Black;
             xf.LeftLineStyle = 1;
             xf.LeftLineColor = Colors.Black;
             xf.RightLineStyle = 1;
             xf.RightLineColor = Colors.Black;
             xf.Font.Bold = true;
             xf.Font.FontName = "仿宋";
             xf.Font.Height = 12 * 20;
             //自動換行
             xf.TextWrapRight = true;

          
             #endregion
             
             #region 列位置排好
             int ViewStatestartrow = startrow;
             //Worksheet,單元格樣式,列名,開始行,開始列,結束行,結束列
             MergeRegion(ref ws, xf, "所屬城市", ViewStatestartrow, 1, ViewStatestartrow, 1); 
             MergeRegion(ref ws, xf, "社區編號", ViewStatestartrow, 2, ViewStatestartrow, 2); 
             MergeRegion(ref ws, xf, "社區名稱", ViewStatestartrow, 3, ViewStatestartrow, 3); 
             MergeRegion(ref ws, xf, "社區地址", ViewStatestartrow, 4, ViewStatestartrow, 4); 
             MergeRegion(ref ws, xf, "社區介紹", ViewStatestartrow, 5, ViewStatestartrow, 5); 
             MergeRegion(ref ws, xf, "登記人", ViewStatestartrow, 6, ViewStatestartrow, 6);

             #endregion



             //第二種單元格樣式
             XF xf1 = xls.NewXF();
             xf1 = xf;
             xf1.Font.Bold = false;
             xf1.Font.FontName = "仿宋_GB2312";
             xf1.Font.Height = 10 * 20;
             int ViewStateEndrow = int.Parse(ViewStatestartrow.ToString()); 
             int dtcolcount = dt.Columns.Count;

               //循環數據表  逐行添加數據
            //ViewStatestartrow 為開始行
             for (int i = 0; i < dt.Rows.Count; i++)
             {
                 int StatRow = i + ViewStatestartrow + 1;

                 for (int k = 0; k < dt.Columns.Count; k++)
                 {
                     //行,列,列值,單元格
                     ws.Cells.Add(StatRow, k + 1, dt.Rows[i][k].ToString(), xf1);//給單元格賦值: 
                 }
                 ViewStateEndrow = StatRow;
             }

        }

        /// <summary>
        /// 格式設置 合並
        /// </summary>
        /// <param name="ws">Worksheet </param>
        /// <param name="xf"> </param>
        /// <param name="title"> 列名</param>
        /// <param name="startRow">開始行</param>
        /// <param name="startCol">開始列</param>
        /// <param name="endRow">結束行</param>
        /// <param name="endCol">結束列</param>
        public static void MergeRegion(ref Worksheet ws, XF xf, string title, int startRow, int startCol, int endRow, int endCol)
        {
            for (int i = startCol; i <= endCol; i++)
            {
                for (int j = startRow; j <= endRow; j++)
                {
                    //行,列,列值,單元格
                    ws.Cells.Add(j, i, title, xf); 
                }
            }
            ws.Cells.Merge(startRow, endRow, startCol, endCol);
        }
    }
}

還有一個重要的一點就是,彈出下載頁面的時候你電腦要刷屏,這樣是消失不見,而你加了UpdatePanel的話也會刷掉

重點來了

 //通過此方法,我們可以把某個位於UpdatePanel中的控件,改為不觸發異步Postback,而是觸發傳統的Postback事件
            //不然會把下載框刷新調
            ((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM