精华内容
下载资源
问答
  • H5页面生成word文件及发送邮件

    千次阅读 2017-07-13 11:48:23
    最近工作中有用到生成word文档及发送该附件的邮件。先说说我的思路和流程吧; 1.在后台用PHP将数据组合拼接成HTML格式; 2.生成带数据(HTML)的word文档(生成到项目对应的目录下); 3.配置发送邮件的信息(如邮件的...

    最近工作中有用到生成word文档及发送该附件的邮件。先说说我的思路和流程吧;

    1.在后台用PHP将数据组合拼接成HTML格式;

    2.生成带数据(HTML)的word文档(生成到项目对应的目录下);

    3.配置发送邮件的信息(如邮件的host/port/username等);

     

    第一步:我们先将数据组装拼接成HTML格式  代码如下:

        header("Cache-Control: no-cache, must-revalidate");

        header("Pragma: no-cache");

        //有了这些,可以把带html标签的html源码导入到word里,并且可以保持html的样式。

        $wordStr = '<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:w="urn:schemas-microsoftcom:office:word" xmlns="http://www.w3.org/TR/REC-html40">

        <head>

        </head><body>';

         

        $wordStr .= '<div class="print-container"><div class="print-header"><h1>家访记录汇总</h1></div><div class="print-content">';

       

        for($i=1;$i<=14;$i++){

             $wordStr .= $this->getWordContent($i,$roomid); //拼接数据

        }

       

        $wordStr .= '</div></div>';

        $wordStr .= '</body></html>';

     

    第2步.生成word文件到项目对应的目录下;

        $file = rand(10000000,99999999).'.docx';

        //保存文件到目录

        $savefile = $file;

        $attachDir = C("resourceFilesUpload");//上传文件保存路径,结尾不要带/

        $attachDir_show = C("resourceFilesView");

       

        $attachSubDir = 'visitdoc_'.date('ymd');

        $attachDir = $attachDir.'/'.$attachSubDir;

        if(!is_dir($attachDir))

        {

            @mkdir($attachDir, 0777);

        }

        $tempPath = $attachDir.'/'.$savefile;

        file_put_contents($tempPath,file_get_contents("php://input"));

       

        $myfile = fopen($tempPath, "a");

        fwrite($myfile, $wordStr);//写入内容

        fclose($myfile);//关闭该操作

     

    3.配置发送邮件的信息(如邮件的host/port/username等);

         //获取保存文件后的地址

        $fileurl = $_SERVER["DOCUMENT_ROOT"]."/Public/upload/".$attachSubDir.'/'.$savefile;

        //注意这里不能用网络地址 如www.baidu.com/image/xxx.jpg

       

        //邮件title

        $emaildesc = "您好:<br/>";

        $emaildesc .= "<b>家访记录汇总, 请打开附件查看</b><br/>";

        $emaildesc .= "此致,晓黑板";

       

        //引用邮件发送类

        require THINK_PATH.'Extend/Emailsend/MySendMailNew.php';

       

        $mail = new MySendMailNew();

        $mail->setServer($this->emailhost, $this->username, $this->password); //你的邮件配置

        $mail->setFrom($this->fromemail);

        $mail->setReceiver($email);

        $mail->setMailInfo($fileName, $emaildesc, $fileurl);

     

        $mail->sendMail();

        //$this->success("邮件发送成功,请及时打开邮箱查看");

        return true;

     

    效果如下:

    1.生成的word文件

     

     

    2.邮件发送后效果:



     

    邮寄发送类的代码见下面附件

    展开全文
  • Java 页面表格导出Word

    2011-06-21 10:25:39
    StringBuffer sb = new ...//拼接字符串 sp = createStringBuffer();   //导出流到前台。  InputStream is = new ByteArrayInputStream(sb.toString().getBytes()); FileExport fe = new FileExport(String.v...

    StringBuffer sb = new StringBuffer();

    //拼接字符串

    sp = createStringBuffer();

     

    //导出流到前台。

     InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
      FileExport fe = new FileExport(String.valueOf(System.currentTimeMillis()), FileConstants.FILE_EXT_NAME_DOC);
      fe.exportFile(response, is);

     

     

     

     

     import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;

    import com.idea.webframe.comm.log.LogWritter;


    /**
     * Title: 系统组件 文件导出
     * Description: 中国税务税收征管信息系统
     * Copyright: Copyright (c) 2006
     * Company: 中国软件与技术服务股份有限公司
     * @author 康水明
     * @version 1.0
     */
    public class FileExport {


        /**
         * 默认构造器
         * @param fileName文件名
         * @param contentTypeName 文件类型
         */
        public FileExport(String fileName, String contentTypeName) {
         initContentTypeMap();
            this.contentTypeName = contentTypeName;
            this.contentType = (String) contentTypeMap.get(contentTypeName);
            this.fileName = fileName;
        }

       
        /**
         * 私有构造器
         */
        private FileExport() {
        }
       
        //----------------------------公共接口----------------------------------------
       
        //对外提供的方法1  byte[]
        public void exportFile(HttpServletResponse response, byte[] bytes) throws IOException {
            if (!isZip && contentTypeName.equals(FileConstants.FILE_EXT_NAME_ZIP)) {
                LogWritter.sysDebug("执行doZippedExport(response, bytes, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doZippedExport(response, bytes, encodeType);
            } else {
                LogWritter.sysDebug("执行doExport(response, bytes, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doExport(response, bytes, encodeType);
            }
        }


        //对外提供的方法2  InputStream
        public void exportFile(HttpServletResponse response, InputStream in) throws IOException {
            if (!isZip && contentTypeName.equals(FileConstants.FILE_EXT_NAME_ZIP)) {
                LogWritter.sysDebug("执行doZippedExport(response, in, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doZippedExport(response, in, encodeType);
            } else {
                LogWritter.sysDebug("执行doExport(response, in, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doExport(response, in, encodeType);
            }
        }


        //对外提供的方法3   File      如果file是目录的话,需使用zip方式
        public void exportFile(HttpServletResponse response, File file) throws IOException {
            if (!isZip && contentTypeName.equals(FileConstants.FILE_EXT_NAME_ZIP)) {
                LogWritter.sysDebug("执行doZippedExport(response, file, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doZipExport(response, file, encodeType);
            } else {
                LogWritter.sysDebug("将file:" + file.getName() + " 转换成InputStream。。。。");
                FileInputStream in = new FileInputStream(file);
                LogWritter.sysDebug("执行doExport(response, in, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doExport(response, in, encodeType);
            }
        }


        //对外提供的方法4  List files   此种情况只支持输出为zip
        public void exportFile(HttpServletResponse response, List files) throws IOException {
            //先将头信息设置为zip类型的
            this.contentTypeName = FileConstants.FILE_EXT_NAME_ZIP;
            this.contentType = (String) contentTypeMap.get(contentTypeName);

            LogWritter.sysDebug("执行 doExport4FileList(response, files, encodeType)方法,参数为fileName:" + fileName +
                    "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
            doExport4FileList(response, files, encodeType);
        }

        //对外提供的方法4  List files   此种情况只支持输出为zip
        public void exportFile(HttpServletResponse response, List bytes, List fileNames) throws IOException {
            //先将头信息设置为zip类型的
            this.contentTypeName = FileConstants.FILE_EXT_NAME_ZIP;
            this.contentType = (String) contentTypeMap.get(contentTypeName);

            LogWritter.sysDebug("执行 doExport4FileList(response, files, encodeType)方法,参数为fileName:" + fileName +
                    "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
            doExport4ByteList(response, bytes,fileNames, encodeType);
        }

       
        //对外提供的方法5   String path
        public void exportFile(HttpServletResponse response, String path) throws IOException {
            if (!isZip && contentTypeName.equals(FileConstants.FILE_EXT_NAME_ZIP)) {
                FileInputStream in = new FileInputStream(path);
                doZippedExport(response, in, encodeType);
            } else {
                LogWritter.sysDebug("获得路径" + path + "上文件的InputStream.......");
                FileInputStream in = new FileInputStream(path);
                LogWritter.sysDebug("执行doExport(response, in, encodeType)方法,参数为fileName:" + fileName +
                        "; contentTypeName:" + contentTypeName + "; contentType:" + contentType);
                doExport(response, in, encodeType);
            }
        }

        //------------------------------私有方法---------------------------------
       /**
        * 初始化头类型Map
        */
        private void initContentTypeMap(){
            if (contentTypeMap.isEmpty()) {
                contentTypeMap.put(FileConstants.FILE_EXT_NAME_CSV, FileConstants.CSV_CONTENT_TYPE);
                contentTypeMap.put(FileConstants.FILE_EXT_NAME_ZIP, FileConstants.ZIP_CONTENT_TYPE);
                contentTypeMap.put(FileConstants.FILE_EXT_NAME_XML, FileConstants.XML_CONTENT_TYPE);
                contentTypeMap.put(FileConstants.FILE_EXT_NAME_TXT, FileConstants.TXT_CONTENT_TYPE);
                contentTypeMap.put(FileConstants.FILE_EXT_NAME_DAT, FileConstants.DAT_CONTENT_TYPE);
                contentTypeMap.put(FileConstants.FILE_EXT_NAME_XLS, FileConstants.XLS_CONTENT_TYPE);
            }
        }
       
        //支持参数是file list 的export方法
        private void doExport4FileList(HttpServletResponse response,
                                       List files, String encoding) throws IOException {
            //Set http response header
            response.reset();
            response.setContentType(contentType + " charset=" + encoding);
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + contentTypeName);

            //Zip and export.
            ZipOutputStream os = null;
            try {
                //取得zip输出流
                os = new ZipOutputStream(response.getOutputStream());
                //循环处理每一个file,将其放入zip中
                int i = 0;
                File theFile;
                for (i = 0; i < files.size(); i++) {
                    theFile = (File) files.get(i);
                    zip(os, theFile, theFile.getName());
                }
                os.flush();
            }
            catch (Exception e) {
                LogWritter.sysError("将fileList导出为zip文件时出现错误。 ", e);
                e.printStackTrace();
            }
            finally {
                closeStream(os);
            }
        }
     
       
        //支持参数是byte list 的export方法
        private void doExport4ByteList(HttpServletResponse response,
                                       List bytes, List fileNames, String encoding) throws IOException {
            //Set http response header
            response.reset();
            response.setContentType(contentType + " charset=" + encoding);
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + contentTypeName);

            //Zip and export.
            ZipOutputStream os = null;
            try {
                //取得zip输出流
                os = new ZipOutputStream(response.getOutputStream());
                //循环处理每一个file,将其放入zip中
                int i = 0;
                int size = bytes.size();
                byte[] b;
                String fileName;
                for (i = 0; i < size; i++) {
                    b = (byte[]) bytes.get(i);
                    fileName = (String)fileNames.get(i);
                    zip(os, b, fileName);
                }
                os.flush();
            }
            catch (Exception e) {
                LogWritter.sysError("将fileList导出为zip文件时出现错误。 ", e);
                e.printStackTrace();
            }
            finally {
                closeStream(os);
            }
        }
       
       
       
        /**
         * Export comma-separated-values file
         * @param response HttpServletResponse
         * @param bytes    byte[] Bytes from csv formatted string
         * @param encoding String Encoding for http content type.
         * @throws IOException
         */
        private void doExport(HttpServletResponse response, byte[] bytes,
                              String encoding) throws IOException {
            //Set http response header
            response.reset();
            response.setContentType(contentType + " charset=" + encoding);
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + contentTypeName);

            //Do export
            BufferedInputStream in = new BufferedInputStream(new ByteArrayInputStream(bytes));
            BufferedOutputStream bo = null;
            try {
                bo = new BufferedOutputStream(response.getOutputStream());
                byte[] buf = new byte[bufferSize];
                int b;
                while ((b = in.read(buf, 0, buf.length)) != -1) {
                    bo.write(buf, 0, b);
                }
                bo.flush();
            } catch (IOException e) {
                LogWritter.sysError("[doExport] Export csv file exception ", e);
                throw e;
            } finally {
                closeStream(bo, in);
            }
        }

        /**
         * Export comma-separated-values file
         *
         * @param response HttpServletResponse
         * @param bytes    byte[] Bytes from csv formatted string
         * @param encoding String Encoding for http content type.
         * @throws IOException
         */
        private void doExport(HttpServletResponse response, InputStream in,
                              String encoding) throws IOException {
            //Set http response header
            response.reset();
            response.setContentType(contentType + " charset=" + encoding);
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + contentTypeName);

            //Do export
            BufferedInputStream bin = new BufferedInputStream(in);
            BufferedOutputStream bo = null;
            try {
                bo = new BufferedOutputStream(response.getOutputStream());
                byte[] buf = new byte[bufferSize];
                int b;
                while ((b = bin.read(buf, 0, buf.length)) != -1) {
                    bo.write(buf, 0, b);
                }
                bo.flush();
            } catch (IOException e) {
                LogWritter.sysError("[doExport] Export csv file exception ", e);
                throw e;
            } finally {
                closeStream(bo, in);
            }
        }

        /**
         * Multi-file zip and export
         * @param response  HttpServletResponse
         * @param bytesList List of several files in bytes form.
         * @param encoding  Encoding for http content type.
         * @throws IOException
         */
        private synchronized void doZippedExport(HttpServletResponse response,
                                                 InputStream in, String encoding) throws
                IOException {
            if (in == null) {
                LogWritter.sysInfo("[doZippedExport] Nothing to be exported");
                return;
            }

            //Set http response header
            response.reset();
            response.setContentType(FileConstants.ZIP_CONTENT_TYPE + " charset=" + encoding);
            response.setHeader("Content-disposition", "filename=" + fileName + FileConstants.FILE_EXT_NAME_ZIP);

            //Zip and export.
            ZipOutputStream os = null;
            BufferedInputStream is = null;
            try {
                os = new ZipOutputStream(response.getOutputStream());
                LogWritter.sysInfo("fileName:" + fileName);
                os.putNextEntry(new ZipEntry(fileName));

                is = new BufferedInputStream(in);
                int b = 0;
                byte[] buf = new byte[bufferSize];
                while ((b = is.read(buf, 0, buf.length)) != -1) {
                    os.write(buf, 0, b);
                }
                os.flush();
            }
            catch (Exception e) {
                LogWritter.sysError("[doZippedExport] Exception ", e);
            }
            finally {
                closeStream(os, is);
            }
        }

        /**
         * Multi-file zip and export
         * @param response  HttpServletResponse
         * @param bytesList List of several files in bytes form.
         * @param encoding  Encoding for http content type.
         * @throws IOException
         */
        private synchronized void doZipExport(HttpServletResponse response,
                                              File file, String encoding) throws
                IOException {
            //Set http response header
            response.reset();
            response.setContentType(FileConstants.ZIP_CONTENT_TYPE + " charset=" + encoding);
            response.setHeader("Content-disposition", "filename=" + fileName + FileConstants.FILE_EXT_NAME_ZIP);

            //Zip and export.
            ZipOutputStream os = null;
            try {
                os = new ZipOutputStream(response.getOutputStream());
                zip(os, file, file.getName());
                os.flush();
            }
            catch (Exception e) {
                LogWritter.sysError("[doZippedExport] Exception ", e);
                e.printStackTrace();
            }
            finally {
                closeStream(os);
            }
        }

        /**
         * zip 文件压缩
         * @param out  zip输出流
         * @param f    文件名
         * @param base 文件目录路径
         * @throws Exception
         */
        private void zip(ZipOutputStream out, File f, String base) throws Exception {
            LogWritter.sysDebug("Zipping  " + f.getName());
            if (f.isDirectory()) {
                File[] fl = f.listFiles();
                out.putNextEntry(new ZipEntry(base + FileConstants.FILE_DIR_SPLIT_DIAGONAL));
                base = base.length() == 0 ? "" : base + FileConstants.FILE_DIR_SPLIT_DIAGONAL;
                for (int i = 0; i < fl.length; i++) {
                    zip(out, fl[i], base + fl[i].getName());
                }
            } else {
                out.putNextEntry(new ZipEntry(base));
                FileInputStream in = new FileInputStream(f);
                byte[] buf = new byte[bufferSize];
                int bb;
                while ((bb = in.read(buf, 0, buf.length)) != -1) {
                    out.write(buf, 0, bb);
                }
                in.close();
            }
        }

     /**
      * zip 文件压缩
      * @param out zip输出流
      * @param b byte[]
      * @param fileName 文件名
      * @throws Exception
      */
        private void zip(ZipOutputStream out, byte[] b, String fileName) throws Exception {
            LogWritter.sysDebug("Zipping  " + fileName);
      out.putNextEntry(new ZipEntry(fileName));
            BufferedInputStream in = new BufferedInputStream(new ByteArrayInputStream(b));
            byte[] buf = new byte[bufferSize];
            int bb;
            while ((bb = in.read(buf, 0, buf.length)) != -1) {
                out.write(buf, 0, bb);
            }
            in.close();
        }   
      
        /**
      * Export zipped comma-separated-values file
      *
      * @param response
      *            HttpServletResponse
      * @param bytes
      *            byte[] Bytes from csv formatted string
      * @param encoding
      *            String Encoding for http content type.
      * @throws IOException
      */
        private synchronized void doZippedExport(HttpServletResponse response,
                                                 byte[] bytes, String encoding) throws IOException {
            //Set http response header
            response.reset();
            response.setContentType(FileConstants.ZIP_CONTENT_TYPE + " charset=" + encoding);
            response.setHeader("Content-disposition", "filename=" + fileName + FileConstants.FILE_EXT_NAME_ZIP);

            //Zip and export.
            ZipOutputStream os = null;
            BufferedInputStream is = null;
            try {
                os = new ZipOutputStream(response.getOutputStream());
                os.putNextEntry(new ZipEntry(fileName));
                is = new BufferedInputStream(new ByteArrayInputStream(bytes));
                int b = 0;
                byte[] buf = new byte[bufferSize];
                while ((b = is.read(buf, 0, buf.length)) != -1) {
                    os.write(buf, 0, b);
                }
                os.flush();
            } catch (IOException e) {
                LogWritter.sysError("[doZippedExport] Exception ", e);
                throw e;
            } finally {
                closeStream(os, is);
            }
        }


        /**
         * Close byte stream
         * @param os OutputStream
         * @param is InputStream
         * @throws IOException
         */
        private void closeStream(OutputStream os, InputStream is) {
            try {
                if (os != null) {
                    os.close();
                    os = null;
                }
                if (is != null) {
                    is.close();
                    is = null;
                }
            } catch (IOException e) {
                LogWritter.sysError("Exception while closing Stream", e);
                e.printStackTrace();
            }
        }

       /**
        * 关闭输出流
        * @param os
        */
        private void closeStream(OutputStream os) {
            try {
                if (os != null) {
                    os.close();
                    os = null;
                }
            } catch (IOException e) {
                LogWritter.sysError("Exception while closing OutputStream", e);
                e.printStackTrace();
            }
        }
       
        //------------------------------属性和setter和getter方法---------------------------------------------
        private String contentTypeName; //向外提供的传入头类型名字 使用FileConstants中的类型 例FileConstants.FILE_EXT_NAME_CSV
        private String encodeType = FileConstants.CHARACTER_ENCODING_UTF8;  //enconding名字,默认为UTF8,若不指定 用默认
        private String fileName; //文件名,不含后缀名
        private String contentType; //导出文件的类型
        private int bufferSize = 2048; //Stream buffer size
        private static Map contentTypeMap = new HashMap();
        //当前导出的文件是否已经压缩,默认为未压缩
        private boolean isZip = false;

      
        /**
      * @return the isZip
      */
     public boolean isZip() {
      return isZip;
     }


     /**
      * @param isZip the isZip to set
      */
     public void setZip(boolean isZip) {
      this.isZip = isZip;
     }


     //get set 方法
        public String getEncodeType() {
            return encodeType;
        }

        public void setEncodeType(String encodeType) {
            this.encodeType = encodeType;
        }

        public String getContentTypeName() {
            return contentTypeName;
        }

        public void setContentTypeName(String contentTypeName) {
            this.contentTypeName = contentTypeName;
            //此处为映射
            this.contentType = (String) contentTypeMap.get(contentTypeName);
        }

        public String getContentType() {
            return contentType;
        }

        public void setContentType(String contentType) {
            this.contentType = contentType;
        }

        /**
         * Set stream buffer size
         *
         * @param bufferSize int New stream buffer size
         */
        public void setBufferSize(int bufferSize) {
            this.bufferSize = bufferSize;
        }

        public int getBufferSize() {
            return bufferSize;
        }
       
        /**
         * Set exported file name
         * @param fileName The fileName to set.
         */
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }


        public String getFileName() {
            return fileName;
        }
    }

    展开全文
  • C# WORD操作实现代码

    2020-12-31 04:20:11
    1.先通过程序生成报表样式的HTML页面,然后修改HTML页面的后缀名为DOC。 2.定制WORD文档的模板文件,在C#中操作WORD模板,生成新的WORD文档。 第一方案简单,只需要改动文件的扩展名就行了,但是也存在了一些问题,...
  • pdf转word教程.txt

    2020-12-14 20:33:26
    该软件集成的功能,包括 Word/TXT/Excel/Image/xps转PDF,PDF转Word/Excel/Image/网页,PDF合并,PDF分割等, 不管你是想合并Office文档,还是合并分割PDF,亦或是解密PDF、旋转页面拼接页面、删除文字、删除页面...
  • C#操作Word

    2010-10-17 22:33:00
    1.先通过程序生成报表样式的HTML页面,然后修改HTML页面的后缀名为DOC。 2.定制WORD文档的模板文件,在C#中操作WORD模板,生成...此方法类似于我们在c#中的后台拼接数据。虽然麻烦,但是 能够灵活定制,只

    1.先通过程序生成报表样式的HTML页面,然后修改HTML页面的后缀名为DOC。
    2.定制WORD文档的模板文件,在C#中操作WORD模板,生成新的WORD文档。
    第 一方案简单,只需要改动文件的扩展名就行了,但是也存在了一些问题,譬如生成的WORD文档样式的丢失。这样对于客户来说可能是一个无法通过的方案。第二 方案比较复杂,需要调用OFFICE的WORD组件通过C#来操作WORD,进而生成WORD。此方法类似于我们在c#中的后台拼接数据。虽然麻烦,但是 能够灵活定制,只不过是操作WORD对象而已。
    经过再三考虑:决定用第二种方法来生成WORD报告文档。
    通过自己的实践,这个需求总算是搞定了,在实际开发的过程中,遇到了这样那样的问题,还好,通过不断的查找网络资源,结合实际开发中的情况,问题都得到了解决。现将本人在开发过程中的一些理解与经验总结一下:
    在VS2008平台下,引用.net-Microsoft.Office.Interop.Word.12,这样就可以在程序用操作WORD对象了。
    通过简单执行,报了80070005错误,这个错误是因为权限不够,需要在DCOM配置中更改.net和IIS用户的操作权限,具体修改过程如下: 解决方法一:
    1.控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档之后,单击属性打开此应 用程序的属性对话框。
    2.单击标识选项卡,然后选择交互式用户。
    3.单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后自定义->编辑->添加ASP.NET账户和IUSER_计算机 名。
    4. 确保允许每个用户访问,然后单击确定。
    5. 单击确定关闭 DCOMCNFG。
    如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:
    在web.config中使用身份模拟,在<system.web>节中加入 <identity impersonate="true" userName="你的用户名 " password="密码 "/>
    </system.web>
    解决了上述问题,开始考虑如何创建WORD模板文件,WORD的模板文件其实就是通过书签来添加内容的。也就是通过在WORD文档中创建书签,然后在程序中获取模板文件的所有书签,通过给书签赋值来进行文档生成的。
    在程序中的操作流程如下:
    声明WORD程序的对象 → 声明一个WORD文档对象 → 获取当前的操作文档对象 → 获取文档所有的书签 → 将数据库数据赋值到对应的书签 → 将文档另存为指定的文件夹下.
    下面将针对农业植物测试报告来分析具体的代码实现:

    复制代码 代码如下:

    //生成WORD程序对象和WORD文档对象
    Microsoft.Office.Interop.Word.Application appWord = new Application();
    Microsoft.Office.Interop.Word.Document doc = new Document();
    object oMissing = System.Reflection.Missing.Value;//这个是什么东西,我始终没搞明白-_-
    //打开模板文档,并指定doc的文档类型
    object objTemplate = Server.MapPath(p_TemplatePath);
    object objDocType = WdDocumentType.wdTypeDocument;
    doc = (Document)appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue);
    //获取模板中所有的书签
    Bookmarks odf = doc.Bookmarks;
    string[] testTableremarks = { "ApplyNo", "AuditingDate", "Auditor", "CheckDate", "Checker"};
    string[] testTablevalues = { "ApplyNo", "AuditingDate", "Auditor", "CheckDate", "Checker",};
    //循环所有的书签,并给书签赋值
    for (int oIndex = 0; oIndex < testTableremarks.Length; oIndex++)
    {
    obDD_Name = WD + testTableremarks[oIndex];
    doc.Bookmarks.get_Item(ref obDD_Name).Range.Text = p_TestReportTable.Rows[0][testTablevalues [oIndex]].ToString();//此处Range也是WORD中很重要的一个对象,就是当前操作参数所在的区域
    }
    //第四步 生成word,将当前的文档对象另存为指定的路径,然后关闭doc对象。关闭应用程序
    object filename = Server.MapPath(p_SavePath) + "//Testing_" + DateTime.Now.ToShortDateString() + ".doc";
    object miss = System.Reflection.Missing.Value;
    doc.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
    object missingValue = Type.Missing;
    object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges;
    doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
    appWord.Application.Quit(ref miss, ref miss, ref miss);
    doc = null;
    appWord = null;
    this.Hid_ShowMessage.Value = "生成成功!";


    上述代码就是一个通过模板文件生成WORD的过程。其实也就是一个替换书签内容的过程。
    在开发的过程中,有些数据是动态增加的,假如我要向一个表格中动态的添加几行数据,就无法用替换书签的方式来进行操作,需要通过程序在文档页面的表格中添加行。
    向表格中添加行,有两种操作形式:一种是在WORD模板中已经存在了一个表格。一种是我们在程序中直接添加一个表格对象。
    第一种情况下,需要注意:在WORD模板中要操作的表格中,不能有纵向合并的单元格,不然程序无法获取到当前要操作对象导致程序报错.单元格的合并,我们可以在程序中控制。
    第二种情况下就需要我们通过程序去直接添加表格了。
    生成表格的代码具体如下:
    1.获取文档中已存在的表格:
    Microsoft.Office.Interop.Word.Table characterTable = doc.Tables[2];//在document对象的集合操作中,起始点是从1开始,并不是从0开始的,此处需要注意。
    2.在文档中直接生成表格,首先要获取插入表格的位置,然后添加表格对象:
    object oEndOfDoc = "//endofdoc";//WORD中预定义的书签,还有很多,此处就不一一列举。
    object oMissing = System.Reflection.Missing.Value;
    Range wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;//获取当前文档的末尾位置。
    wrdRng.InsertAfter(" ");//插入一行,此处不能用 wrdRng.InsertAfter(""),如果用这个,就不能换行,我也不知道为什么。

    复制代码 代码如下:

    object oCollapseEnd = Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd;
    object oPageBreak = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;//分页符
    wrdRng.Collapse(ref oCollapseEnd);
    wrdRng.InsertBreak(ref oPageBreak);//插入了一页
    wrdRng.Collapse(ref oCollapseEnd);
    wrdRng.InsertAfter("图片信息");
    wrdRng.Font.Size = 20;//指定操作对象的文字大小
    wrdRng.Font.Bold = 1;//指定操作对象的粗体:1为粗体,0为正常
    wrdRng.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;//指定操作区域的文字布局:居中对齐
    //上述代码的意思是:找到当前的末尾位置,然后插入一个分页符,相当于跳到了一个新页,在这个新页的顶端写入文字“图片信息”,并指定文字大小为20,粗体居中显示。
    wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    wrdRng.InsertAfter(" ");
    wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    wrdRng.InsertParagraphAfter();//插入一个段落,在此段落上插入一个2行一列的表格。
    Microsoft.Office.Interop.Word.Table newTable = doc.Tables.Add(wrdRng, 2, 1, ref oMissing, ref oMissing);


    我们还可以对表格进行格式设置,此处我们就不在一一列举。
    3.下面我们分析一下对表格的单元格的操作:合并,拆分。这个就需要我们根据实际表格来进行操作:
    //获取具体的某个单元格(1,1),获取第一行第一列的单元格
    Cell cell = doc.Tables[1].Cell(1,1);
    cell.Range.Text="Text";//指定当前单元格的内容为Text
    在Table的操作中,添加新行:
    object beforeRow = doc.Tables[1].Rows[2];//此行是先获取到第二行
    doc.Tables[1].Rows.Add(ref beforeRow);//效果类似于在WORD中此表格的第二行上进行【插入行】操作,插入的新行将会插入到当前行的上一行中,格式也是和此行一致的。
    //合并单元格:感觉在此处合并单元格挺傻瓜的,你只需要指定你要合并的起始单元格和结束单元格,然后通过Merge操作就行了
    Cell cell = doc.Tables[1].Cell(iRow, 2);//列合并
    cell.Merge(doc.Tables[1].Cell(iRow, 6));
    Cell cell1 = doc.Tables[1].Cell(iRow - 1, 1);//行合并
    cell1.Merge(doc.Tables[1].Cell(iRow + 1, 1));
    上述操作就是在此程序中用到的一些知识点,还有好多的东西需要去熟悉、理解。
    另外,在程序的测试过程中发现,当执行一次文档生成后,在资源管理器中始终有winword.exe进程杀不掉,目前的解决办法是:直接杀进程,代码如下:

    复制代码 代码如下:

    protected void killAllProcess() // 杀掉所有winword.exe进程
    {
    System.Diagnostics.Process[] myPs;
    myPs = System.Diagnostics.Process.GetProcesses();
    foreach (System.Diagnostics.Process p in myPs)
    {
    if (p.Id != 0)
    {
    string myS = "WINWORD.EXE" + p.ProcessName + " ID:" + p.Id.ToString();
    try
    {
    if (p.Modules != null)
    if (p.Modules.Count > 0)
    {
    System.Diagnostics.ProcessModule pm = p.Modules[0];
    myS += "/n Modules[0].FileName:" + pm.FileName;
    myS += "/n Modules[0].ModuleName:" + pm.ModuleName;
    myS += "/n Modules[0].FileVersionInfo:/n" + pm.FileVersionInfo.ToString();
    if (pm.ModuleName.ToLower() == "winword.exe")
    p.Kill();
    }
    }
    catch
    { }
    finally
    {
    }
    }
    }
    }


    目前为止,一个WORD文档就生成了。上述为我在这个程序开发中遇到的问题和解决方法,可能有好多地方都是考虑不全的,如果在程序开发中对WORD的操作有新的认识的话,欢迎和我沟通交流,彼此提高!
    下边是在网上一些比较好的摘抄:
    创建新Word

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    ref oMissing, ref oMissing);


    打开文档:

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    object fileName = @"E:CCCXCXXTestDoc.doc";
    oDoc = oWord.Documents.Open(ref fileName,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);


    导入模板

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    object fileName = @"E:XXXCCXTest.doc";
    oDoc = oWord.Documents.Add(ref fileName, ref oMissing,
    ref oMissing, ref oMissing);


    .添加新表

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    ref oMissing, ref oMissing);
    object start = 0;
    object end = 0;
    Word.Range tableLocation = oDoc.Range(ref start, ref end);
    oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);


    .表插入行

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    ref oMissing, ref oMissing);
    object start = 0;
    object end = 0;
    Word.Range tableLocation = oDoc.Range(ref start, ref end);
    oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
    Word.Table newTable = oDoc.Tables[1];
    object beforeRow = newTable.Rows[1];
    newTable.Rows.Add(ref beforeRow);


    .单元格合并

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    ref oMissing, ref oMissing);
    object start = 0;
    object end = 0;
    Word.Range tableLocation = oDoc.Range(ref start, ref end);
    oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
    Word.Table newTable = oDoc.Tables[1];
    object beforeRow = newTable.Rows[1];
    newTable.Rows.Add(ref beforeRow);
    Word.Cell cell = newTable.Cell(1, 1);
    cell.Merge(newTable.Cell(1, 2));


    .单元格分离

    复制代码 代码如下:

    object oMissing = System.Reflection.Missing.Value;
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add( oMissing,
    ref oMissing, ref oMissing);
    object start = 0;
    object end = 0;
    Word.Range tableLocation = oDoc.Range(ref start, ref end);
    oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
    Word.Table newTable = oDoc.Tables[1];
    object beforeRow = newTable.Rows[1];
    newTable.Rows.Add(ref beforeRow);
    Word.Cell cell = newTable.Cell(1, 1);
    cell.Merge(newTable.Cell(1, 2));
    object Rownum = 2;
    object Columnnum = 2;
    cell.Split(ref Rownum, ref Columnnum);


    通过段落控制插入

    复制代码 代码如下:


    object oMissing = System.Reflection.Missing.Value;
    object oEndOfDoc = "/endofdoc"; /**//* endofdoc is a predefined bookmark */
    //Start Word and create a new document.
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    ref oMissing, ref oMissing);
    //Insert a paragraph at the beginning of the document.
    Word.Paragraph oPara1;
    oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
    oPara1.Range.Text = "Heading 1";
    oPara1.Range.Font.Bold = 1;
    oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph.
    oPara1.Range.InsertParagraphAfter();

    展开全文
  • 实际开发中需要给当前的word插入一个封面,调用insertFile 命令可以实现将封面与word文档内容合并,当时内容和封面出现在同一个页面上的问题;网上很多方法是通过自己录制宏命令给文档插入一个分节符在程序中调用宏...

    实际开发中需要给当前的word插入一个封面,调用insertFile 命令可以实现将封面与word文档内容合并,当时内容和封面出现在同一个页面上的问题;网上很多方法是通过自己录制宏命令给文档插入一个分节符在程序中调用宏命令进行调用实现。其实这种方法是没有必要的;直接比照vba脚本里的InsertBreak命令即可实现插入分节符,来解决合并文档内容拼接在一起问题;

    Dispatch.call(selection,  "InsertBreak" ,  new Variant(2) );//插入换页分节符

    Dispatch.call(selection, "InsertBreak" , new Variant(3) );//插入不换页分节符

    参考vba脚本:

    Sub QQ1722187970()
        Const wdPageBreak = 7
        Const wdSectionBreakContinuous = 3
        Const wdSectionBreakNextPage = 2
        Const wdGoToPage = 1
        Const wdGoToAbsolute = 1
        Dim oDoc As Document
        Dim oRng As Range
        Set oDoc = Word.ActiveDocument
        Dim iPageNo As Long
        '获取总页数
        With oDoc
        iPageNo = .Range.Information(wdNumberOfPagesInDocument)
            For i = iPageNo To 2 Step -1
                '定位到页开始
                Set oRng = .GoTo(wdGoToPage, Which:=wdGoToAbsolute, Count:=i)
                Debug.Print oRng.Start, oRng.End
                '插入不换页分节符
                oRng.InsertBreak wdSectionBreakContinuous
            Next i
        End With
    End Sub

    展开全文
  •  2、动态拼接html,然后使用局部打印页面  3、对Freemark的静态模板进行数据填充    经过讨论,动态拼接html被砍掉了,因为打印的时候不灵活,主要是样式不好控制。对于poi导出和freemark来说...
  • 环境为S1SH,当提交表单时用form能接收到页面上的所有文本框值,我需要将这些内容放到Map 或者 数组 或者拼接成字符串 然后和在数 据库中的原始数据相对比这样的效率很低,况且当对比到不一样的数据时还需要自己...
  • 支持PDF拼接页面,可把PDF的多个页面拼接成一个页面,两页拼为一页,四页拼为一页,所有页面拼接为一页。 支持PDF合并,合并多个PDF文档为一个PDF文档 支持PDF分割,把一个PDF分割为多个文档,可以分割为单页PDF,...
  • html2canvas踩坑记

    万次阅读 热门讨论 2018-01-09 17:08:12
    最近写一个活动项目需要将一个HTML页面转为图片,之前一直是后台采用拼接的方式完成,然而现在遇到一个问题,Java拼接的HTML在生成图片时由于里面的文字太长没法自动换行,想使用css的强制换行 #wrap{word-break:...
  • PDFdoPDFConverter3.5.exe

    2021-04-22 14:47:10
    而且软件除了文件格式转换功能外,还拥有Office文档合并分割、旋转页面拼接页面、删除文字、删除页面、添加水印等非常强大实用的功能,可以适合各种用户群体使用。 附带的注册机可以完美激活pdfdo
  • PDFdo 多功能转换器

    2019-03-06 21:46:54
    该软件集成的功能,包括 Word/TXT/Excel/Image转PDF,PDF转Word/Excel/Image,PDF合并,PDF分割等, 不管你是想合并Office文档,还是合并分割PDF,亦或是解密PDF、旋转页面拼接页面、删除文字、删除页面、添加...
  • 用户可以轻松地将其他文档转换为pdf格式,也可以将pdf文件转换为其他格式,如常见的word、excel,ppt等,另外还支持Office文档合并分割、旋转页面拼接页面、删除文字、删除页面、添加水印,都是非常实用的功能,...
  • PDFdo PDF转换器 (正式版)v1.4(已破解); 免安装版,解压即可使用; ... 功能: 一、文件转换:1.... 拼接页面 5. PDF合并 6. PDF分割 7. 插入PDF 四、安全:1. PDF加密 2. 解密去除限制 亲测可用!!!
  • 《从0到1:CTFer成长之路》 [第一章 web入门] 常见的搜集 启动环境: 提示为敏感文件,首先对网站目录进行扫描: ...使用记事本或word打开,得到flag3: 拼接后得到完整的flag: n1book{info_1s_v3ry_i
  • 一、思路 ...首先,从命令行参数列表中,提取出要爬取商品的关键词,根据关键词拼接URL,请求相应的URL,然后利用Xpath从响应页面中提取商品信息,最后将商品信息存储到数据库即可 1、根据关键词搜索 ...
  • js打印表格出现中断现象怎么处理

    千次阅读 热门讨论 2018-05-10 16:59:16
    昨天静姐交给我一个打印的需求,开始想着导出到word在打印,后来洪肖哥说那样太麻烦,直接在页面上打印比较快,所以就有了这篇博客。 实现过程: 1. 查询数据库,前台得到json 2. 拼接表格 3. 打印 遇到的...
  • 一开始的做法是直接在路径中拼接参数,如下: window.location.href = ctx+"/show/search?word="+word+"&amp;flag="+flag; 要在另外一个页面取值需要截取路径中的参数,可以实现需求。 ...
  • requests库01---请求参数

    2018-10-18 14:46:27
    1.URL参数  参数直接拼接在URL后面, 问号(?)前面是接口的请求地址,后面是参数【多个...word=%E6%B5%8B%E8%AF%95  优点: 简单,页面跳转快  缺点: ① get方法的拼接长度可能很长,浏览器限制长度:...
  • HackMD Search-crx插件

    2021-04-04 10:51:16
    方法输入效果默认单词拼接空间并查找所有查询的注释minus -word从结果中排除了负单词的注释短语“单词”包围“的单词甚至没有缝隙包括空格Regex Reg:正常表达式您可以使用正则表达式###下载和查看存储的笔记在...
  • <code class="language-python">import time import jieba from snownlp import SnowNLP import requests from bs4 import BeautifulSoup from wordcloud import WordCloud from PIL import Image ... word_list ...
  • Sqlalchemy动态拼接字段查询显示表格 TableWidget嵌入部件 Containers QGroupBox QScrollArea 仿QQ设置面板 QToolBox QTabWidget QStackedWidget 左侧选项卡 QFrame QWidget 样式表测试 QMdiArea ...
  • 各种图形或图形框之间可以组合、拼接、对齐、规则排列,这为用户绘制复杂的结构图、流程图提供了专业的制作工具。  语音控制功能 WPS 2000 内部集成了语音控制功能。只要您的电脑配备了声卡和话筒,可以使用语音向 ...
  • 会计理论考试题

    2012-03-07 21:04:40
    C、UNIX、AutoCAD、PoewPoint D、Word、Lotus 1-2-3、AutoCAD 17.编译软件属于 ___C___ 。 A、数据库管理系统 B、工具软件 C、系统软件 D、应用软件 18.计算机病毒最大的危害是__D____。 A、计算机病毒具有传染性 B...
  • freemarker总结

    2015-01-04 14:22:05
    options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. ...
  • javascript入门笔记

    2018-05-15 15:01:07
    内核负责页面内容的渲染,由以下两部分组成: 1、内容排版引擎 - 解析HTML/CSS 2、脚本解释引擎 - 解析Javascript 2、搭建JS运行环境(重点) 1、独立安装的JS解释器 - NodeJS console.log("Hello World"); ...
  • ✅ MPAA 电影分级插件:在豆瓣电影、腾讯视频页面显示该片的 MPAA 分级 - 更多介绍 ✅ Bamboo:可能是 macOS 上最好用的 Parquet 文件查看器 ✅ Douban Book+:打破豆瓣读书与微信读书之间的壁障 - 更多介绍 ...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

word页面拼接