標籤: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 + " "); oStringWriter.Write("收貨單位:"); oStringWriter.Write(ShuoDW.Text + "<br />");
oStringWriter.Write("申請單位:"); oStringWriter.Write(ReqDW.Text + " "); oStringWriter.Write("申請人姓名:"); oStringWriter.Write(Req_Name.Text + "<br />");
oStringWriter.Write("交貨地點:"); oStringWriter.Write("從 " + DZStart.Text + " 到 " + DZEnd.Text + " "); oStringWriter.Write("申請發貨時間:"); oStringWriter.Write(Req_SendDate.Text + "<br />");
oStringWriter.Write("連絡人:" + Link_Name.Text + " "); oStringWriter.Write("連絡人電話:" + Link_Tel.Text + " " + "連絡人傳真:" + Link_Fax.Text + "<br />");
oStringWriter.Write("銷售公司營銷管理處::"); oStringWriter.Write(XSMana.Text + "<br />");
oStringWriter.Write("發貨方式:"); oStringWriter.Write(Send_Type.SelectedItem.Text + " "); 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控制