zoukankan      html  css  js  c++  java
  • 导出EXCEL、WORD中带有图片的无敌替换法

    1.简单的asp导出只要跳转到某个页面带上一个参数即可:

    //导出Excel

         int mIsExport = RequestHelper.GetQueryString<int>("IsExport", 0);
         if (mIsExport == 1)
         {

             Response.Clear();
             Response.Buffer = true;
             Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMdd") + ".xls");
             Response.ContentEncoding = System.Text.Encoding.Default;
             Response.ContentType = "application/vnd.ms-excel";
             this.EnableViewState = false;
         }

    //导出Word

         int mIsExport = RequestHelper.GetQueryString<int>("IsExport", 0);
         if (mIsExport == 1)
         {

             Response.Clear();
             Response.Buffer = true;
             Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMdd") + ".doc");
             Response.ContentEncoding = System.Text.Encoding.Default;
             Response.ContentType = "application/vnd.ms-word";
             this.EnableViewState = false;
         }

    以上方法很方便快捷,但是存在局限性,图片并不能一起导出,因此介绍第二种方法:

    2.替换法:

    优点:可以一起导出文字、表格、图片

    缺点:模板确定性,不可循环,如果模板中有动态内容不推荐使用

    局限性:偶然发现一个问题,模板是由office2007转换成的htm网页文件,但是导出结果WPS或者office2003似乎不支持图片,同时,我尝试用2003或者wps转成模板,但是2003或者wps不支持带图片转成模板。遇到瓶颈,求高手指点!

    a).首先我们需要将要导出的文件(Word或者Excel~Whatever~)整理好,将页面需要填写数据的地方存在数据的都删除。同时多句嘴,最好打印预览一下文件是不是A4纸大小,方便导出的文件直接可以打印。

    b).保存好模板(.doc或者.xls)然后将模板另存为-》其他个格式-》.htm文件注意将附属文件一起保存到一个文件夹中(不懂怎么设置的请咨询我)

    c).到程序部分了,新建一个页面,页面内容如下:

    <%@ Page Language="C#" AutoEventWireup="true" %>
    <%@ Import Namespace="AgileCorp.CBO.Service" %>
    <%@ Import Namespace="AgileCorp.Core.DB" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    <%@ Import Namespace="AgileCorp.Core.ExFile" %>
    <%@ Import Namespace="AgileCorp.Core.Web" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="AgileCorp.Core.Web.Html" %>
    <%@ Import Namespace="AgileCorp.SystemProvider" %>
    <%

            String tplContent = Server.MapPath("~/CargoDan.htm");
            String tmpContent = FileHelper.ReadFile(tplContent);
            String fileName = Server.MapPath("~/CargoDan.xls");
            FileHelper.DeleteFile(fileName);

            /*取需要的数据*/
        String mConsignmentNum = RequestHelper.GetQueryString("ConsignmentNum");   
        //得到货运主表信息
        List<DbParam> mDicSysParam = new List<DbParam>();
        List<DbParam> mDicInputParam = new List<DbParam>();
        mDicInputParam.Add(new DbParam("Action", "getone"));
        mDicInputParam.Add(new DbParam("ConsignmentNum", mConsignmentNum));
        mDicInputParam.Add(new DbParam("PageIndex", 0));
        mDicInputParam.Add(new DbParam("PageSize", 0));
        DataTable mDtFormDetail = AgileCorpAppSystemService.GetDataFunctionDataTable("QueryCargo", mDicInputParam, out mDicSysParam);
       
              
        String mFromPlace = "";       //出发地      
        String mToPlace  = "";//到达地
        String mAreaTel = "";         //到达地电话      
        String mWayBillNum = "";//航班编号
        String mReceiveCompanyName = "";//收件人
        String mRealTotalCount = "";//总数量
        String mRealWeightAll = "";//总重量
        String mRealEnterName = "";//货物性质(即货物品名等等)
        String mToPlaceAreaType = "";
        String mFlight1 = "";
        String mCargoDate = "";


        if (mDtFormDetail != null && mDtFormDetail.Rows.Count > 0)
        {
            mFromPlace = mDtFormDetail.Rows[0]["FromPlace"].ToString();
            mToPlace = mDtFormDetail.Rows[0]["ToPlace"].ToString();
            mAreaTel = mDtFormDetail.Rows[0]["AreaTel"].ToString();
            mWayBillNum = mDtFormDetail.Rows[0]["WayBillNum"].ToString();
            mReceiveCompanyName = mDtFormDetail.Rows[0]["ReceiveCompanyName"].ToString();
            mRealTotalCount = mDtFormDetail.Rows[0]["RealTotalCount"].ToString();
            mRealWeightAll = mDtFormDetail.Rows[0]["RealWeightAll"].ToString();
            mRealEnterName = mDtFormDetail.Rows[0]["RealEnterName"].ToString();
            mToPlaceAreaType = mDtFormDetail.Rows[0]["ToPlaceAreaType"].ToString();
            mFlight1 = mDtFormDetail.Rows[0]["Flight1"].ToString();
            mCargoDate = mDtFormDetail.Rows[0]["CargoDate"].ToString();
            if (!String.IsNullOrEmpty(mCargoDate))
            {
                mCargoDate = DateTime.Parse(mDtFormDetail.Rows[0]["CargoDate"].ToString()).ToString("yyyy-MM-dd");
            }
            //临时数据
            tmpContent = tmpContent.Replace("{ConsignmentNum}", mConsignmentNum);
            tmpContent = tmpContent.Replace("{FromPlace}", mFromPlace);
            tmpContent = tmpContent.Replace("{ToPlace}", mToPlace);
            tmpContent = tmpContent.Replace("{AreaTel}", mAreaTel);
            tmpContent = tmpContent.Replace("{WayBillNum}", mWayBillNum);
            tmpContent = tmpContent.Replace("{ReceiveCompanyName}", mReceiveCompanyName);
            tmpContent = tmpContent.Replace("{RealTotalCount}", mRealTotalCount);
            tmpContent = tmpContent.Replace("{RealWeightAll}", mRealWeightAll);
            tmpContent = tmpContent.Replace("{RealEnterName}", mRealEnterName);
            tmpContent = tmpContent.Replace("{ToPlaceAreaType}", mToPlaceAreaType);
            tmpContent = tmpContent.Replace("{Flight1}", mFlight1);
            tmpContent = tmpContent.Replace("{CargoDate}", mCargoDate);

        }
        FileHelper.WriteFile(fileName, tmpContent);
        Response.Redirect(ResolveUrl("~/CargoDan.xls"));       
        %>  

    d).在之前保存好的.htm文件中在恰当的位置填入替换字符“{ConsignmentNum} ...”

    e).只需一个页面跳转到该执行页面,即可下载文件

    需要注意的是,保存好的.htm文件要用VS打开,将其编码格式由gb2312改为UTF-8,不然导出会有乱码。

    导出成功界面如下:

  • 相关阅读:
    Quartz任务调度(3)存储与持久化操作配置详细解
    Quartz任务调度(2)CronTrigger定制个性化调度方案
    Quartz任务调度(1)概念例析快速
    Mybatis Generator最完整配置详解
    SpringMVC之@ControllerAdvice
    文件上传api——MultipartFile
    Springboot使用MatrixVariable 注解
    p命名空间和c命名空间
    SpringBoot配置Cors跨域请求
    SpringBoot五步配置Mybatis
  • 原文地址:https://www.cnblogs.com/howie/p/2866753.html
Copyright © 2011-2022 走看看