//界面上的導出按鈕事件
protected void btnExcelAll_Click(object sender, EventArgs e) { Code.ExcelHelper.ExportExcel(Code.ExcelHelper.GenDataSet(Session["Query_FDBH"].ToString()),Response, "報表彙總"); }
public static void ExportExcel(DataSet ds, HttpResponse response,string fn) { //生成Excel字符串 string str = ExcelHelper.exportToExcel2003(ds, fn); //臨時excel文件路徑 string filename = System.Web.HttpContext.Current.Server.MapPath("~/xlsFiles/" + fn + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"); //臨時rar文件名 string filenameRar = fn + DateTime.Now.ToString("yyyyMMddHHmmss") + ".rar"; //臨時rar文件路徑 string filepathRar = System.Web.HttpContext.Current.Server.MapPath("~/xlsFiles/" + filenameRar); //存盤 System.IO.StreamWriter sw = new System.IO.StreamWriter(filename, false); sw.Write(str); sw.Flush(); sw.Close(); sw = null; //壓縮---方法一(需要下載添加引用SharpZipLib.dll並using ICSharpCode.SharpZipLib.Zip) //using (ZipFile zip = ZipFile.Create(filepathRar)) //{ // zip.BeginUpdate(); // zip.Add(filename); // zip.CommitUpdate(); //} //ExcelHelper.DownloadFileByPath(response, filenameRar, filepathRar); //方法二:不需要額外添加引用 bool zipFlag = false; System.Diagnostics.Process Process1 = new System.Diagnostics.Process(); Process1.StartInfo.FileName = @"C:/Program Files/WinRAR/WinRAR.exe"; Process1.StartInfo.CreateNoWindow = true; Process1.StartInfo.Arguments = " a -ep " + filepathRar + " " + filename; //a-ep 文件直接包含於壓縮包下而不是壓縮包裏面的子目錄下面 //Process1.StartInfo.Arguments = " a -ep -hpXXXXXX secret " + filepathRar + " " + filename; //加密 Process1.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//隱藏壓縮時顯示百分比 Process1.Start(); Process1.WaitForExit(); if (Process1.HasExited) { // iExitCode爲0說明壓縮成功,其他都有error int iExitCode = Process1.ExitCode; if (iExitCode == 0) { //正常完成 zipFlag = true; } else { //有錯 zipFlag = false; } } Process1.Close(); if (zipFlag) { System.IO.File.Delete(filename);//壓縮完成後刪除服務器上的.xls文件 //導出 ExcelHelper.DownloadFileByPath(response, filenameRar, filepathRar); } else { //如果壓縮失敗,導出.xls文件 ExcelHelper.DownloadFileByPath(response, filenameRar.Substring(0, filenameRar.Length - 3) + "xls", filename); } }
//得到數據集
public static DataSet GenDataSet(string sfdbh) { DataSet ds = new DataSet(); DataTable dt; string[] strsql ={ sql1, sql2, sql3, ....}; string[] strsheetname ={ "KPI指標", "單品指標", ...... }; for (int i = 0; i < n; i++)//n表示excel的sheet的個數 { dt = SqlHelper.ExecuteDataset(DAL.Configuration.ConnectionString, CommandType.Text, strsql[i].ToString ()).Tables[0].Copy(); ds.Tables.Add(dt); ds.Tables[i].TableName = strtablename[i].ToString(); } return ds; }
//Excel字符串---處理excel的字符串
public static string exportToExcel2003(DataSet source, string fileName) { System.Text.StringBuilder sb = new System.Text.StringBuilder(""); const string startExcelXML = "<xml version>/r/n<Workbook " + "xmlns=/"urn:schemas-microsoft-com:office:spreadsheet/"/r/n" + " xmlns:o=/"urn:schemas-microsoft-com:office:office/"/r/n " + "xmlns:x=/"urn:schemas- microsoft-com:office:" + "excel/"/r/n xmlns:ss=/"urn:schemas-microsoft-com:" + "office:spreadsheet/">/r/n <Styles>/r/n " + "<Style ss:ID=/"Default/" ss:Name=/"Normal/">/r/n " + "<Alignment ss:Vertical=/"Center/"/>/r/n <Borders/>" + "/r/n <Font ss:Size=/"12/"/>/r/n <Interior/>/r/n <NumberFormat/>" + "/r/n <Protection/>/r/n </Style>/r/n " + "<Style ss:ID=/"BoldColumn/">/r/n <Font " + "x:Family=/"Swiss/" ss:Bold=/"1/" ss:Size=/"12/"/>/r/n </Style>/r/n " + "<Style ss:ID=/"StringLiteral/">/r/n <NumberFormat" + " ss:Format=/"@/"/>/r/n </Style>/r/n <Style " + "ss:ID=/"Decimal/">/r/n <NumberFormat " + "ss:Format=/"0.00/"/>/r/n </Style>/r/n " + "<Style ss:ID=/"Integer/">/r/n <NumberFormat " + "ss:Format=/"0/"/>/r/n </Style>/r/n <Style " + "ss:ID=/"DateLiteral/">/r/n <NumberFormat " + "ss:Format=/"Short Date/"/>/r/n </Style>/r/n <Style " + "ss:ID=/"Linker/">/r/n <Font x:Family='Swiss' ss:Size=/"12/" ss:Color='#0000FF' ss:Underline='Single'/>/r/n <NumberFormat />/r/n </Style>" + "</Styles>/r/n "; const string endExcelXML = "</Workbook>"; int rowCount = 0; int sheetCount = 0; sb.Append(startExcelXML); for (int i = 0; i < source.Tables.Count; i++) { sheetCount = 0; sb.Append("<Worksheet ss:Name=/"" + source.Tables[i].TableName + "/">"); sb.Append("<Table>"); sb.Append("<Row>"); for (int x = 0; x < source.Tables[i].Columns.Count; x++) { sb.Append("<Cell ss:StyleID=/"BoldColumn/"><Data ss:Type=/"String/">"); if (source.Tables[i].Columns[x].ColumnName.Length > 5 && source.Tables[i].Columns[x].ColumnName.Substring(0, 5).Equals("HREF:")) { sb.Append(source.Tables[i].Columns[x].ColumnName.Split(":".ToCharArray())[1]); } else { sb.Append(source.Tables[i].Columns[x].ColumnName); } sb.Append("</Data></Cell>"); } sb.Append("</Row>"); foreach (DataRow x in source.Tables[i].Rows) { rowCount++; //if the number of rows is > 64000 create a new page to continue output if (rowCount == 64000) { rowCount = 0; sheetCount++; sb.Append("</Table>"); sb.Append(" </Worksheet>"); sb.Append("<Worksheet ss:Name=/"" + source.Tables[i].TableName + sheetCount.ToString() + "/">"); sb.Append("<Table>"); } sb.Append("<Row>"); //ID=" + rowCount + " for (int y = 0; y < source.Tables[i].Columns.Count; y++) { System.Type rowType; rowType = x[y].GetType(); switch (rowType.ToString()) { case "System.String": string XMLstring = x[y].ToString(); if (XMLstring.IndexOf("^") > 0) { String[] s = XMLstring.Split("^".ToCharArray()); for (int m = 0; m < s.Length; m++) { s[m] = s[m].Trim().Replace("&", "&").Replace(">", ">").Replace("<", "<"); //sb.Append("<Cell ss:StyleID=/"StringLiteral/""); sb.Append("<Cell"); if (source.Tables[i].Columns[y].ColumnName.Length > 4 && source.Tables[i].Columns[y].ColumnName.Substring(0, 5).Equals("HREF:")) { sb.Append(" ss:StyleID=/"Linker/" ss:HRef=/"#"); sb.Append(s[m]); sb.Append("!A1/""); } sb.Append("><Data ss:Type=/"String/">"); sb.Append(s[m]); sb.Append("</Data></Cell>"); } } else { XMLstring = XMLstring.Trim(); XMLstring = XMLstring.Replace("&", "&"); XMLstring = XMLstring.Replace(">", ">"); XMLstring = XMLstring.Replace("<", "<"); //sb.Append("<Cell ss:StyleID=/"StringLiteral/""); sb.Append("<Cell"); if (source.Tables[i].Columns[y].ColumnName.Length > 4 && source.Tables[i].Columns[y].ColumnName.Substring(0, 5).Equals("HREF:")) { sb.Append(" ss:StyleID=/"Linker/" ss:HRef=/"#"); sb.Append(XMLstring); sb.Append("!A1/""); } sb.Append("><Data ss:Type=/"String/">"); sb.Append(XMLstring); sb.Append("</Data></Cell>"); } break; case "System.DateTime": //Excel has a specific Date Format of YYYY-MM-DD followed by //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000 //The Following Code puts the date stored in XMLDate //to the format above DateTime XMLDate = (DateTime)x[y]; string XMLDatetoString = ""; //Excel Converted Date //XMLDatetoString = XMLDate.Year.ToString() + // "-" + // (XMLDate.Month < 10 ? "0" + // XMLDate.Month.ToString() : XMLDate.Month.ToString()) + // "-" + // (XMLDate.Day < 10 ? "0" + // XMLDate.Day.ToString() : XMLDate.Day.ToString()) + // "T" + // (XMLDate.Hour < 10 ? "0" + // XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) + // ":" + // (XMLDate.Minute < 10 ? "0" + // XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) + // ":" + // (XMLDate.Second < 10 ? "0" + // XMLDate.Second.ToString() : XMLDate.Second.ToString()) + // ".000"; //sb.Append("<Cell ss:StyleID=/"DateLiteral/"><Data ss:Type=/"DateTime/">"); XMLDatetoString = XMLDate.ToString("yyyy-MM-dd HH:mm:ss"); sb.Append("<Cell ss:StyleID=/"DateLiteral/"><Data ss:Type=/"String/">"); sb.Append(XMLDatetoString); sb.Append("</Data></Cell>"); break; case "System.Boolean": //sb.Append("<Cell ss:StyleID=/"StringLiteral/"><Data ss:Type=/"String/">"); sb.Append("<Cell><Data ss:Type=/"String/">"); sb.Append(x[y].ToString()); sb.Append("</Data></Cell>"); break; case "System.Int16": case "System.Int32": case "System.Int64": case "System.Byte": sb.Append("<Cell ss:StyleID=/"Integer/"><Data ss:Type=/"Number/">"); sb.Append(x[y].ToString()); sb.Append("</Data></Cell>"); break; case "System.Decimal": case "System.Double": sb.Append("<Cell ss:StyleID=/"Decimal/"><Data ss:Type=/"Number/">"); sb.Append(x[y].ToString()); sb.Append("</Data></Cell>"); break; case "System.DBNull": //sb.Append("<Cell ss:StyleID=/"StringLiteral/"><Data ss:Type=/"String/">"); sb.Append("<Cell><Data ss:Type=/"String/">"); sb.Append(""); sb.Append("</Data></Cell>"); break; default: throw (new Exception(rowType.ToString() + " not handled.")); } } sb.Append("</Row>"); } sb.Append("</Table>"); sb.Append(" </Worksheet>"); } sb.Append(endExcelXML); return sb.ToString(); }
大家好,我是Python進階者。 一、前言 前幾天在Python白銀交流羣【上海新年人】問了一個Pandas數據分組的問題,問題如下: list1 = '電子稅票號碼 徵收稅務機關 社保經辦機構 單位編號 費種 徵收品目 徵收子目 費款所屬
DevExpress Office File API是一個專爲C#, VB.NET 和 ASP.NET等開發人員提供的非可視化.NET庫。有了這個庫,不用安裝Microsoft Office,就可以完全自動處理Excel、Word等文檔
VLOOK™ 是針對 Typora(跨平臺 Markdown 編輯器)的主題包和增強插件(針對導出的 HTML 文件),旨在與衆 Markdown 粉共創 Markdown 的自動化排版 2.0,在保持 Markdown 簡潔性的基礎上,
前言 在Java開發中,處理Excel文件是一項常見的任務。在處理Excel文件時,經常需要對單元格進行樣式設置,以滿足特定的需求和美化要求,通過使用Java中的相關庫和API,我們可以輕鬆地操作Excel文件並設置單元格的樣式。 在本文中
使用O2OA(翱途)開發平臺可以非常方便地進行項目的業務需求開發與實施,最終呈現的項目成果也不拘一格,可能是OA系統,可能是人力資源管理系統,也可能是固定資產管理,合同管理等等。文本主要介紹O2OA官網準備的演示環境之戰略管理系統的內容
添加新選項步驟如下: 1.新建工作表,取名"菜單表".比如你的原表爲SHEET1表,把SHEET2作爲你的菜單表; 2.在菜單表的A列,輸入你要在下拉菜單中顯示的"菜單"; 3.選擇菜單表的A列,在名稱框中(左上角,fx左邊)輸入"菜單名稱
大家好,我是Python進階者。 一、前言 前幾天在Python白銀交流羣【Jethro Shen】問了一個Python處理Excel數據讀取的問題。問題如下:有遇到過嗎?同樣的規則 Excel 中 比Python 結果大? 二、實
前言 Excel擁有在辦公領域最廣泛的受衆羣體,以其強大的數據處理和可視化功能,成了無可替代的工具。它不僅可以呈現數據清晰明瞭,還能進行數據分析、圖表製作和數據透視等操作,爲用戶提供了全面的數據展示和分析能力。 今天小編就爲大家介紹一下,如
O2OA考勤管理提供了一個通用的考勤管理,企業可以使用它實現手機打卡,數據導入,數據分析,數據統計。員工可以對考勤分析結果提起申訴,每個考勤週期系統均會出具相關的統計結果。 點擊組件-考勤管理,即可打開考勤管理系統。首先進入考勤管理先
重慶興農融資擔保集團有限公司(以下簡稱“重慶興農擔保集團”)成立於2011年8月,是經市政府批准同意,由市國資委牽頭組建的一家市屬國有重點企業。集團註冊資本85.9億元,資本金規模居全市擔保行業第一,淨資產超過93億元,綜合實力位於全國擔
本文分享自華爲雲社區《10分鐘搞懂各種內存溢出案例!!(含完整源碼,建議收藏)》,作者:冰 河。 作爲程序員,多多少少都會遇到一些內存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個假程序員!哈哈,開個玩笑。今天,我
Ai technology 前言 AppBuilder上線了低代碼製作組件功能,可以通過工作流的方式構建自定義組件,完成簡單Agent無法完成的複雜功能,使得生成的文本更加定製化,
最近在刷一些問題的時候看到有下面一個問題 上面問的是當輸入的字符串爲什麼的時候返回 True 總結 在做題目的時候,第一次還做錯了。 這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目 後來拿着程序跑了下。 p
DevExpress WinForms的Diagram(流程圖)組件允許您複製Microsoft Visio中的許多功能,並能在下一個Windows Forms項目中引入信息豐富的圖表、流程圖和組織圖。 P.S:DevExpress Win