Aspose Words、Excel(xlsx、图片)导出等操作

时间:2024-03-10 10:59:55

 

/*Word、Excel先保存再输出-下载*/
strReportFilePath = Server.MapPath("~") + strReportFilePath;

            doc.Save(strReportFilePath);

            if (!string.IsNullOrEmpty(strReportFilePath))
            {
                string NewFile = strReportFilePath;// Server.MapPath(strReportFilePath);

                //如果文件不存在,可能需要执行重新生成
                FileStream fs = new FileStream(NewFile, FileMode.Open);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);

                string strFileName = strReportName + ".docx";
                //判断浏览器类型 如果是IE文件名转编码
                string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
                //IE浏览器
                if (curBrowser.IndexOf("explorer", StringComparison.Ordinal) >= 0 ||
                    curBrowser.IndexOf("ie", StringComparison.Ordinal) >= 0)
                {
                    strFileName = HttpUtility.UrlEncode(strFileName, Encoding.UTF8);
                }

                Response.ContentType = "application/ms-word";
                Response.Charset = "utf-8";
                Response.ContentEncoding = System.Text.Encoding.UTF8;
                Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
                Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName);

                Response.OutputStream.Write(buffer, 0, buffer.Length);
                fs.Flush();
                fs.Close();
                Response.Flush();
                return;
            }
/*Word直接输出*/
 MemoryStream mStream = new MemoryStream();
            doc.Save(mStream, Aspose.Words.SaveFormat.Doc);

HttpContext.Current.Response.BinaryWrite(mStream.ToArray());
/*Excel导出*/
Workbook workbook = new Workbook();
/****/
 HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Charset = "utf-8";
            Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
            //判断浏览器类型 如果是IE文件名转编码
            string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
            //IE浏览器
            if (curBrowser.IndexOf("explorer", StringComparison.Ordinal) >= 0 || curBrowser.IndexOf("ie", StringComparison.Ordinal) >= 0)
            {
                strName = HttpUtility.UrlEncode(strName, Encoding.UTF8);
            }

            HttpContext.Current.Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.xls", strName));
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.BinaryWrite(workbook.SaveToStream().ToArray());
            HttpContext.Current.Response.End();

 

//以html table 的方式输出Excel 
string strMNName = string.Format("{0}{1}({2}到{3})综合报表", listMN[0].UnitsName, listMN[0].MNName,
                                   DateTime.Parse(strST).ToString("yyyy年MM月dd日"), DateTime.Parse(strET).ToString("yyyy年MM月dd日"));

                stBuilder.Append("<style type=\'text/css\'>tr,td{border:solid .5pt Black;}</style>");
                stBuilder.Append(string.Format("<table><tr height=24 style=\'font-size:10pt;text-align: center;font-weight:bolder;\'><td colspan={0}>{1}</td></tr>", iRow, strMNName));

                stBuilder.Append(stTitle.);
                stBuilder.Append(stContent);
                stBuilder.Append("</table>");
                System.IO.StringWriter sw = new System.IO.StringWriter(stBuilder);

                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(strMNName, Encoding.UTF8) + ".xls");
                HttpContext.Current.Response.Charset = "UTF-8";
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                HttpContext.Current.Response.ContentType = "application/ms-excel";
                HttpContext.Current.Response.Write(sw);
                HttpContext.Current.Response.End();

 

Excel xls最大行65536行,xlsx最大行1048576行;

Xlsx格式输出问题

因Aspose.Cells Workbook  Response.BinaryWrite(workbook.SaveToStream().ToArray()); 输出流输出sheet页最大行65536行;可改为先存储文件,再以url连接下载或文件流的方式输出

//输出xlsx格式
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //"application/ms-excel";
//保存xlsx文件--可用上述方法(FileStream)输出
workbook.Save("C:\\Test.xlsx", SaveFormat.Xlsx);

文件流输出方式参考GetExcelFile 或 DownLoadFile方法

Asp.Net输出Excel Xlsx

//Asp.Net输出Excel Xlsx
HtmlSaveOptions saveOptions = new HtmlSaveOptions();
saveOptions.ExpCellNameToXLSX = true;
saveOptions.SaveFormat = SaveFormat.Xlsx;

//SaveOptions saveOptions1 = null;
//saveOptions1.ExpCellNameToXLSX = true;
//saveOptions1.SaveFormat = SaveFormat.Xlsx;
//saveOptions.Encoding= Encoding.UTF8;
//workbook.Save("D://1.xlsx", FileFormatType.Xlsx, SaveType.Default, Response);
workbook.Save(Response, "1.xlsx", ContentDisposition.Inline, saveOptions);
Response.Flush();
Response.Close();
Response.End();
                

 

Excel导出图片

        /// <summary>
        /// 导出文件(图片)
        /// </summary>
        private void ExportPng()
        {
            Workbook workbook = new Workbook();

            string strFileName = NewGUID();
            string strFilePath = Server.MapPath("/UpLoad/Temp/");
            string strFilePathName = strFilePath + strFileName;
            string strXlsPath = strFilePathName + ".xls";

            if (!Directory.Exists(strFilePath))
            {
                Directory.CreateDirectory(strFilePath);
            }
            workbook.Save(strXlsPath);
            ExcelToImage.ExcelToPicture(strXlsPath, strFilePathName, System.Drawing.Imaging.ImageFormat.Jpeg);

            System.IO.FileStream fs = new System.IO.FileStream(strFilePathName + ".Jpeg", System.IO.FileMode.Open, System.IO.FileAccess.Read);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, Convert.ToInt32(fs.Length));
            fs.Close();

            strFileName = "报表";
            //判断浏览器类型 如果是IE文件名转编码
            string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
            //IE浏览器
            if (curBrowser.IndexOf("explorer", StringComparison.Ordinal) >= 0 || curBrowser.IndexOf("ie", StringComparison.Ordinal) >= 0)
            {
                strFileName = HttpUtility.UrlEncode(strFileName, Encoding.UTF8);
            }

            Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
            Response.Charset = "utf-8";
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.jpeg", strFileName));
            Response.ContentEncoding = Encoding.UTF8;
            Response.ContentType = "image/pjpeg";
            Response.OutputStream.Write(buffer, 0, Convert.ToInt32(buffer.Length));
            Response.End();
        }

        private void ExportPng2()
        {
            Workbook workbook = new Workbook();

            System.Drawing.Bitmap bit = null;
            MemoryStream Stream = new MemoryStream();

            Aspose.Cells.Rendering.ImageOrPrintOptions imgOptions = new Aspose.Cells.Rendering.ImageOrPrintOptions();
            imgOptions.ImageFormat = System.Drawing.Imaging.ImageFormat.Png;

            imgOptions.OnePagePerSheet = true;
            imgOptions.PrintingPage = PrintingPageType.IgnoreBlank;
            Aspose.Cells.Rendering.SheetRender sr = null;
            //只转换第一个sheet,可以添加循环导出多个
            Worksheet sheet = workbook.Worksheets[0];
            sr = new Aspose.Cells.Rendering.SheetRender(sheet, imgOptions);
            bit = sr.ToImage(0);

            bit.Save(Stream, System.Drawing.Imaging.ImageFormat.Png);

            string strFileName = "报表";

            //判断浏览器类型 如果是IE文件名转编码
            string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
            //IE浏览器
            if (curBrowser.IndexOf("explorer", StringComparison.Ordinal) >= 0 || curBrowser.IndexOf("ie", StringComparison.Ordinal) >= 0)
            {
                strFileName = HttpUtility.UrlEncode(strFileName, Encoding.UTF8);
            }

            Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
            Response.Charset = "utf-8";
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.jpeg", strFileName));
            Response.ContentEncoding = Encoding.UTF8;
            Response.ContentType = "image/png";
            Response.BinaryWrite(Stream.ToArray());
            Response.End();
        }