[轉]Excel.dll 匯出Excel控制

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   os   使用   io   for   

Excel.dll 匯出Excel控制2010-06-12 11:26 2932人閱讀 評論(2) 收藏 舉報excelmicrosoftstring產品伺服器google

        最近做了個匯出Excel的程式! 那個心煩啊。

 

        開始要求是直接將gridview匯出成Excel,簡單!

      

   這樣就可以解決了! 但要重寫個 方法 才能匯出        private void ToExcel(Control ctl, string FileName) 
        { 
            HttpContext.Current.Response.Charset = "UTF-8"; 
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" +          FileName); 
            ctl.Page.EnableViewState = false; 
            System.IO.StringWriter tw = new System.IO.StringWriter(); 
            HtmlTextWriter hw = new HtmlTextWriter(tw); 
            ctl.RenderControl(hw);
            HttpContext.Current.Response.Write(tw.ToString()); 
            HttpContext.Current.Response.End(); 
        }       public override void VerifyRenderingInServerForm(Control control) 
        { 
            // Confirms that an HtmlForm control is rendered for 
        }    後來要求又改了,往匯出的Excel裡 加東西 並不只是哪個 gridview裡德值! 棘手.....  然後想到了 往 oStringWriter  裡 加入  html 代碼來加值 。 比如劃table啊、 來控制   比如 :           ChanpDataGrid.AllowPaging = false; //清除分頁
            ChanpDataGrid.AllowSorting = false; //清除排序   
            DataTable dtChanp = (DataTable)Session["SendChanpDt"];
            ChanpDataGrid.Columns.RemoveAt(5); //清除操作列
            ChanpDataGrid.DataSource = dtChanp;
            ChanpDataGrid.DataBind();            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.AppendHeader("Content-Disposition", "attachment;filename=SendInfo.xls");
            Response.ContentEncoding = System.Text.Encoding.UTF7;
            Response.ContentType = "application/ms-excel";//設定輸出檔案類型為excel檔案。 
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
            oStringWriter.Write("片區:"); oStringWriter.Write(areaDDList.SelectedItem.Text + "<br />");
            oStringWriter.Write("開票單位:"); oStringWriter.Write(Kai_DW.SelectedItem.Text + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); oStringWriter.Write("收貨單位:"); oStringWriter.Write(ShuoDW.Text + "<br />");
            oStringWriter.Write("申請單位:"); oStringWriter.Write(ReqDW.Text + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); oStringWriter.Write("申請人姓名:"); oStringWriter.Write(Req_Name.Text + "<br />");
            oStringWriter.Write("交貨地點:"); oStringWriter.Write("從&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + DZStart.Text + "&nbsp;&nbsp;&nbsp;到&nbsp;&nbsp;&nbsp;" + DZEnd.Text + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); oStringWriter.Write("申請發貨時間:"); oStringWriter.Write(Req_SendDate.Text + "<br />");
            oStringWriter.Write("連絡人:" + Link_Name.Text + "&nbsp;&nbsp;&nbsp;"); oStringWriter.Write("連絡人電話:" + Link_Tel.Text + "&nbsp;&nbsp;&nbsp;" + "連絡人傳真:" + Link_Fax.Text + "<br />");
            oStringWriter.Write("銷售公司營銷管理處::"); oStringWriter.Write(XSMana.Text + "<br />");
            oStringWriter.Write("發貨方式:"); oStringWriter.Write(Send_Type.SelectedItem.Text + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); oStringWriter.Write("傳遞時間:"); oStringWriter.Write(CD_Date.Text + "<br />");            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            this.ChanpDataGrid.RenderControl(oHtmlTextWriter);
            string str = oHtmlTextWriter.ToString();
            Response.Output.Write(oStringWriter.ToString());
            Response.Flush();
            Response.End();    這樣就比較  SB 。 呵呵~   媽的後來要求又變了,要直接顯示預覽列印!  這個頭疼~ 只有用到了 Excel.dll  來搞了!    首先要完整的安裝Excel。 才能進行如下配置。   這個dll 很強大, 針對 Excel的操作。 裡面都包含有方法!   要用這個東西 首先得配置下電腦的 Excel操作許可權 。 在開始-->運行 裡輸入 dcomcnfg 到裡面設定。伺服器端必須要設定的一點是COM組件的操作許可權。在命令列鍵入“DCOMCNFG”,則進入COM組件配置介面,選擇Microsoft  Excel後點擊屬性,將三個單選項一律選擇自訂,編輯中將Everyone加入所有許可權。在“標識”中設定為互動式使用者,儲存完畢後重新啟動伺服器。
***如果不設定互動式使用者,EXCEL進程如果停留在記憶體中,你是無法結束進程的具體Google!     這樣B/S 程式就可以操作本機Excel了 。   建立如下:            ZYP.DBUtility.ExcelHelper excel = new ZYP.DBUtility.ExcelHelper();
            excel.CreateExcel();
                      Excel.Worksheet sheet = (Excel.Worksheet)excel.myWorkBook.Worksheets[1];            sheet.Visible = Excel.XlSheetVisibility.xlSheetVisible;
            excel.myExcel.Caption = "發貨資訊";
            sheet.Activate();    這個是建立個 Sheet .    給儲存格樣式:                excel.SetColumnWidth(1, 1, 9);  //編號
                excel.SetColumnWidth(3, 3, 20); //產品型號
                excel.SetColumnWidth(2, 2, 12); //物料碼
                excel.SetColumnWidth(4, 4, 8);  //訂貨數量
                excel.SetColumnWidth(6, 6, 15); //產品名稱
                excel.SetColumnWidth(7, 7, 25); //特殊說明
                excel.SetColumnWidth(5, 5, 8); //確認數量
                excel.CellAutoWrap(5, 7, (dt.Rows.Count + 12), 7); //設定自動換行
                excel.CellsAlignment(4, 1, 4, 7, ZYP.DBUtility.ExcelHelper.ExcelHAlign.置中, ZYP.DBUtility.ExcelHelper.ExcelVAlign.置中);  //明細標題置中
                //excel.CellsAlignment(8, 3, 8, 3, ZYP.DBUtility.ExcelHelper.ExcelHAlign.靠右, ZYP.DBUtility.ExcelHelper.ExcelVAlign.置中);  //合計的劇右
                //excel.CellsAlignment(8, 3, 8, 3, ZYP.DBUtility.ExcelHelper.ExcelHAlign.靠右, ZYP.DBUtility.ExcelHelper.ExcelVAlign.置中);  //"合計"的劇右
                excel.CellsAlignment((dt.Rows.Count + 8), 7, (dt.Rows.Count + 12), 7, ZYP.DBUtility.ExcelHelper.ExcelHAlign.靠左, ZYP.DBUtility.ExcelHelper.ExcelVAlign.置中);  //時間居左
                excel.FontColor(4, 1, 4, 7, ZYP.DBUtility.ExcelHelper.ColorIndex.梅紅);
                excel.FontStyle(4, 1, 4, 7, true, false, ZYP.DBUtility.ExcelHelper.UnderlineStyle.無底線);  //明細表頭加粗
                excel.FontStyle(3, 2, 3, 2, true, false, ZYP.DBUtility.ExcelHelper.UnderlineStyle.無底線);  //三行加粗
                excel.FontStyle(2, 1, 2, 1, true, false, ZYP.DBUtility.ExcelHelper.UnderlineStyle.無底線);  //二行加粗
                excel.FontStyle(1, 1, 1, 7, true, false, ZYP.DBUtility.ExcelHelper.UnderlineStyle.無底線);  //一行加粗
                excel.FontStyle(dt.Rows.Count + 12, 1, dt.Rows.Count + 12, 7, true, false, ZYP.DBUtility.ExcelHelper.UnderlineStyle.無底線);  //主管簽字加粗
                excel.FontStyle(dt.Rows.Count + 4, 1, dt.Rows.Count + 4, 7, true, false, ZYP.DBUtility.ExcelHelper.UnderlineStyle.無底線);  //合計加粗
                //excel.CellsBackColor(4, 1, 4, 7, ZYP.DBUtility.ExcelHelper.ColorIndex.白色, ZYP.DBUtility.ExcelHelper.Pattern.Horizontal); //明細表頭背景
                excel.CellsUnite((dt.Rows.Count + 5), 2, (dt.Rows.Count + 5),7);  //備忘 合并
                //excel.CellsUnite(4, 6, 4, 7); //產品名稱 合并       給sheet 賦值  :                sheet.Cells[1, 4] = "發 貨 通 知";
                sheet.Cells[2, 1] = "生產處營銷管理室:";
                sheet.Cells[3, 2] = "請協助辦理以下商品發運。";
                //發貨明細
                sheet.Cells[4, 1] = "序號";
                sheet.Cells[4, 2] = "物料碼";
                sheet.Cells[4, 3] = "產品型號";
                sheet.Cells[4, 4] = "訂貨數量";
                sheet.Cells[4, 5] = "確認數量";
                sheet.Cells[4, 6] = "產品名稱";   具體的還得看你的要求                //excel.myExcel.Visible = true;
                sheet.PageSetup.PrintGridlines = false; //去掉列印時的網格線
                //sheet.PrintPreview(true);這是 最後顯示列印是的設定在檔案的匯出過程中要 用相對路徑。 要不然Excel匯出後開啟 會出現 載入是問題(找不到../.../.../style.css) 這個問題。項目中使用Excell.dll組件操作excel檔案,在VS 2005調試的時候一切正常,但以部署到伺服器上就出現了以下錯誤:System.UnauthorizedAccessException: 檢索 COM 類別工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。
   在 ExcelHelper.StartExcel() 位置 d:DotNetworkspaceWebSitesScoreCardApp_CodeExcelHelper.cs:行號 111
   在 ExcelHelper..ctor(Boolean visible) 位置 d:DotNetworkspaceWebSitesScoreCardApp_CodeExcelHelper.cs:行號 101
   在 ScoreCard.Process(String country) 位置 d:DotNetworkspaceWebSitesScoreCardApp_CodeScoreCard.cs:行號 109
Google 一下,也找到了一些方案,但均不湊效,後來經過嘗試,找到了如下的 解決方案:在Web.config檔案中的 system.web節 中加入<identity impersonate="true" userName="JAMES/Administrator" password="##################" />
 userName 的格式為:{機器名}/{使用者名稱}   password 為登入密碼

[轉]Excel.dll 匯出Excel控制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.