精华内容
下载资源
问答
  • C#通过模板创建Word文件

    千次阅读 2015-06-26 09:45:15
    C#通过模板创建Word文件,模板文件创建书签bookmark,并在调用时给书签位置赋值。 模板创建文件类 /// ///创建Word格式的Report 的摘要说明 /// public class CreateWordReport { private _Application ...

    C#通过模板创建Word文件。模板文件中创建书签bookmark,并在调用时给书签赋值。

    模板创建文件类

        /// <summary>
        ///创建Word格式的Report 的摘要说明
        /// </summary>
        public class CreateWordReport
        {
            private _Application wordApp = null;
            private _Document wordDoc = null;
    
            public _Application Application
            {
                get { return wordApp; }
                set { wordApp = value; }
            }
    
            public _Document Document
            {
                get { return wordDoc; }
                set { wordDoc = value; }
            }
    
            //通过模板创建新文档
            public void CreateNewDucument(string filePath)
            {
                killWinWordProcess();
                wordApp = new ApplicationClass();
                wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
                wordApp.Visible = false;
                object miss = System.Reflection.Missing.Value;
                object templateName = filePath;
                wordDoc = wordApp.Documents.Open(ref templateName, 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);
            }
    
            //保存新文件
            public void SaveDocument(string filePath)
            {
                object fileName = filePath;
                object format = WdSaveFormat.wdFormatDocument; //保存格式
                object miss = System.Reflection.Missing.Value;
                wordDoc.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);
                //关闭wordDoc,wordApp对象
                object SaveChanges = WdSaveOptions.wdSaveChanges;
                object OriginalFormat = WdOriginalFormat.wdOriginalDocumentFormat;
                object RouteDocument = false;
                wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocument);
                wordApp.Quit(ref SaveChanges, ref OriginalFormat, ref RouteDocument);
            }
    
            //写入页眉
            public void InsertHeader(string docHeader)
            {
                wordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
                wordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
                wordApp.ActiveWindow.ActivePane.Selection.InsertAfter(docHeader); //页眉内容
            }
    
            //在书签处插入值
            public bool InsertValue(string bookmark, string value)
            {
                object bkObj = bookmark;
                if (wordApp.ActiveDocument.Bookmarks.Exists(bookmark))
                {
                    //该方法会截取value,输入文本内容显示不全
                    //wordApp.ActiveDocument.Bookmarks.get_Item(ref bkObj).Select();
                    //wordApp.Selection.TypeText(value);
    
                    Range range = wordApp.ActiveDocument.Bookmarks.get_Item(ref bkObj).Range;//表格插入位置 
                    range.Text = value;//在书签处插入文字内容  
                    return true;
                }
                return false;
            }
    
            //在书签处插入表格
            public Table InsertTable(string bookmark, int rows, int columns)
            {
                object miss = System.Reflection.Missing.Value;
                object oStart = bookmark;
                Range range = wordDoc.Bookmarks.get_Item(ref oStart).Range; //表格插入位置
                Table newTable = wordDoc.Tables.Add(range, rows, columns, ref miss, ref miss);
                //设置表的样式
                newTable.Borders.Enable = 1; //允许有实线边框
                newTable.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt; //边框宽度
                //newTable.PreferredWidth = 17;
                newTable.AllowAutoFit = true;
                return newTable;
            }
    
            //给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素
            public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column, string value)
            {
                table.Cell(row, column).Range.Text = value;
            }
    
            //给表格插入一行数据,n为表格的序号,row行号,column列数,values插入的值
            public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int columns, string[] values)
            {
                for (int i = 0; i < columns; i++)
                {
                    table.Cell(row, i + 1).Range.Text = values[i];
                }
            }
    
            // 杀掉winword.exe进程
            public void killWinWordProcess()
            {
                System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");
                foreach (System.Diagnostics.Process process in processes)
                {
                    if (process.MainWindowTitle == "")
                    {
                        process.Kill();
                    }
                }
            }
        }

    调用方法

     CreateWordReport report = new CreateWordReport();
     string templateFile = System.IO.Path.Combine("Repx", @"NotamListTemplate.dot");//模板文件,也可为doc文件
     report.CreateNewDucument(System.IO.Path.Combine(Application.StartupPath, templateFile));
    
     //将内容写入书签位置
     report.InsertValue("bookmarkUser", "");
     report.InsertValue("bookmarkDate", DateTime.Now.ToString("yyyy年M月dd日"));
     report.InsertValue("bookmarkNavigateRoute", sbContentFir.ToString());//重要通告(航路)
     report.InsertValue("bookmarkNotamContent", sbContentAd.ToString());//重要通告(机场)
     report.SaveDocument(path);




    展开全文
  • doc = this._wordApplication.Documents.Add(@"D:\Fdsfsdsfsdfds.dotx"); ...用这个会把模板的样式,文字内容都创建到新word文档里 转载于:https://www.cnblogs.com/kingline/p/9399392.html...
    doc = this._wordApplication.Documents.Add(@"D:\Fdsfsdsfsdfds.dotx");

    用这个会把模板的样式,文字内容都创建到新word文档里

    转载于:https://www.cnblogs.com/kingline/p/9399392.html

    展开全文
  • 利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码。解决模板读取异常问题,提供wordUtils工具类(各种功能实现) 第一步: 项目结构见下图: 第二...

    利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码。解决模板读取异常问题,提供wordUtils工具类(各种功能实现)
    第一步:
    项目结构见下图:
    项目结构图
    第二步:
    前端界面见下
    前端界面

    swagger界面

    第三步:
    模板样式
    模板格式

    第四步:
    输出结果
    输出结果

    核心代码如下:

    package com.word.poi.demo.controller;
    
    import com.word.poi.demo.service.WordService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    @RestController
    @RequestMapping("/word")
    @CrossOrigin(origins = "*", maxAge = 3600)
    @Api(tags = "word文档处理")
    public class WordController {
        @Autowired
        private WordService wordService;
    
        @RequestMapping(value = "/exportWord",method = RequestMethod.GET)
        @ApiOperation(value = "生成并导出word文档", httpMethod = "GET", notes = "生成并导出word文档", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
        public void exportFDDBrief(
                HttpServletResponse response
                ) throws Exception {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HHmmss");
            //获取统计时间段
            String time = "10.09-10.19";
            String wordName = "Word版-("+time+")"+sdf.format(new Date());
            // 告诉浏览器用什么软件可以打开此文件
            response.reset();// 清空输出流
            response.setHeader("content-Type", "application/msword");
            // 下载文件的默认名称
            response.setHeader("Content-Disposition", "attachment;filename="
                    +new String(wordName.getBytes("GB2312"), "8859_1") + ".docx");
            OutputStream out = response.getOutputStream();
            //读取word模板
            InputStream in = this.getClass().getResourceAsStream("/templates/wordTemplate.docx");
            wordService.exportWord(in,out,"全球");
    
        }
    
    }
    
    
    package com.word.poi.demo.util;
    
    import org.apache.commons.collections4.CollectionUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.xwpf.usermodel.*;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 通过word模板生成新的word工具类
     * 
     */
    public class WorderToNewWordUtils {
    
        /**
         * 根据模板生成新word文档
         * 判断表格是需要替换还是需要插入,判断逻辑有${}为替换,表格无${}为插入
         * @param textMap 需要替换的信息集合
         * @return 成功返回true,失败返回false
         */
        public static XWPFDocument changWordForcommon(InputStream in,Map<String, String> textMap) {
            XWPFDocument document = null;
            try {
                //第一步:获取docx解析对象
                document = new XWPFDocument(in);
                //第二步:重构XWPFDocument中 不合格的 占位符 比如:${abcd}分开为${a,b..,cd}
                refactorXWPFDocument(document);
                //第三步:解析替换文本段落对象
                changeText(document, textMap);
                //第四步:解析替换表格对象
               changeTableCity(document, textMap);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return document;
    
        }
        /**
         * 根据模板生成新word文档
         * 判断表格是需要替换还是需要插入,判断逻辑有${}为替换,表格无${}为插入
         * @param textMap 需要替换的信息集合
         * @param extendTableMap 需要插入的表格信息集合
         * @param colorMapForCell
         * @return 成功返回true,失败返回false
         */
        public static XWPFDocument changWordForComplex(
                InputStream in,
                Map<String, String> textMap, 
                Map<String, List<List<String>>> extendTableMap,
                Map<String, List<String>> colorMapForCell) {
            XWPFDocument document = null;
            try {
                //第一步:获取docx解析对象
                document = new XWPFDocument(in);
                //第二步:重构XWPFDocument中 不合格的 占位符 比如:${abcd}分开为${a,b..,cd}
                refactorXWPFDocument(document);
                //第三步:解析替换文本段落对象
               changeText(document, textMap);
                //第四步:解析替换表格对象
               changeTableProvince(document, textMap, extendTableMap);
                //第五步:根据逻辑设置表格cell的背景颜色
                setColorForCell(document,colorMapForCell);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return document;
    
        }
        private static void setColorForCell(XWPFDocument document, Map<String, List<String>> colorMapForCell) {
            List<XWPFTable> tables = document.getTables();
            for (int i = 0; i <tables.size() ; i++) {
                List<String> placeList = colorMapForCell.get("table" + i);//获取表格坐标list
                if (CollectionUtils.isNotEmpty(placeList)){
                    for (String palce:placeList) {
                        String[] split = palce.split(",");
                        int x = Integer.parseInt(split[0]);
                        int y = Integer.parseInt(split[1]);
                        tables.get(i).getRow(x).getCell(y).setColor("FF0000");
                    }
                }
            }
        }
    
        /**
         * 替换段落文本
         * @param document docx解析对象
         * @param textMap 需要替换的信息集合
         */
        public static void changeText(XWPFDocument document, Map<String, String> textMap){
            //获取段落集合
            List<XWPFParagraph> paragraphs = document.getParagraphs();
    
            for (XWPFParagraph paragraph : paragraphs) {
                //判断此段落时候需要进行替换
                String text = paragraph.getText();
                //重构段落  不合格的 占位符 比如:${abcd}分开为${a,b..,cd}
               // refactorParagraph(paragraph);
                if(checkText(text)){
                    List<XWPFRun> runs = paragraph.getRuns();
                    for (XWPFRun run : runs) {
                        //替换模板原来位置
                        run.setText(changeValue(run.toString(), textMap),0);
                    }
                }
            }
    
        }
    
        /**
         * 替换表格对象方法
         * @param document docx解析对象
         * @param textMap 需要替换的信息集合
         */
        public static void changeTableCity(XWPFDocument document, Map<String, String> textMap
               ){
            //获取表格对象集合
            List<XWPFTable> tables = document.getTables();
            for (int i = 0; i < tables.size(); i++) {
                //只处理行数大于等于2的表格,且不循环表头
                XWPFTable table = tables.get(i);
                if(table.getRows().size()>1){
                    //判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
                    if(checkText(table.getText())){
                        List<XWPFTableRow> rows = table.getRows();
                        //遍历表格,并替换模板
                        eachTable(rows, textMap);
                    }
                }
            }
        }
        /**
         * 替换表格对象方法
         * @param document docx解析对象
         * @param textMap 需要替换的信息集合
         * @param extendTableMap 需要插入的表格信息集合
         */
        public static void changeTableProvince(XWPFDocument document, Map<String, String> textMap,
                                               Map<String, List<List<String>>> extendTableMap){
            //获取表格对象集合
            List<XWPFTable> tables = document.getTables();
            int tableNo = 0;
            for (int i = 0; i < tables.size(); i++) {
                //只处理行数大于等于2的表格,且不循环表头
                XWPFTable table = tables.get(i);
                if(table.getRows().size()>1){
                    //判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
                    if(checkText(table.getText())){
                        List<XWPFTableRow> rows = table.getRows();
                        //遍历表格,并替换模板
                        eachTable(rows, textMap);
                        tableNo++;
                    }else{
                        List<List<String>> tableList = extendTableMap.get("table" + tableNo);
                        insertTable(table, tableList);
                        tableNo++;
                    }
                }
            }
        }
    
    
    
    
    
        /**
         * 遍历表格
         * @param rows 表格行对象
         * @param textMap 需要替换的信息集合
         */
        public static void eachTable(List<XWPFTableRow> rows ,Map<String, String> textMap){
            for (XWPFTableRow row : rows) {
                List<XWPFTableCell> cells = row.getTableCells();
                for (XWPFTableCell cell : cells) {
                    //判断单元格是否需要替换
                    if(checkText(cell.getText())){
                        List<XWPFParagraph> paragraphs = cell.getParagraphs();
                        for (XWPFParagraph paragraph : paragraphs) {
                            List<XWPFRun> runs = paragraph.getRuns();
                            for (XWPFRun run : runs) {
                                run.setText(changeValue(run.toString(), textMap),0);
                            }
                        }
                    }
                }
            }
        }
    
        /**
         * 为表格插入数据,行数不够添加新行
         * @param table 需要插入数据的表格
         * @param tableList 插入数据集合
         */
        public static void insertTable(XWPFTable table, List<List<String>> tableList){
            //创建行,根据需要插入的数据添加新行,不处理表头
            for(int i = 1; i < tableList.size(); i++){
                //XWPFTableRow row =table.createRow();
            }
            //遍历表格插入数据
            List<XWPFTableRow> rows = table.getRows();
            for(int i = 1; i < rows.size(); i++){
                XWPFTableRow newRow = table.getRow(i);
                List<XWPFTableCell> cells = newRow.getTableCells();
                for(int j = 0; j < cells.size(); j++){
                    XWPFTableCell cell = cells.get(j);
                   // cell.setText(tableList.get(i-1).get(j));
                    XWPFParagraph xwpfParagraph = cell.getParagraphs().get(0);//获取cell中的第一个段落第一个ruan并设置字体样式和内容
                    XWPFRun run = xwpfParagraph.createRun();
                    run.setFontSize(9);
                    run.setFontFamily("宋体");
                    run.setText(tableList.get(i-1).get(j));
                }
            }
        }
    
    
    
        /**
         * 判断文本中时候包含{{
         * @param text 文本
         * @return 包含返回true,不包含返回false
         */
        public static boolean checkText(String text){
            boolean check  =  false;
            if(null != text && text.indexOf("$")!= -1){
                check = true;
            }
            return check;
    
        }
    
        /**
         * 匹配传入信息集合与模板
         * @param value 模板需要替换的区域
         * @param textMap 传入信息集合
         * @return 模板需要替换区域信息集合对应值
         */
        public static String changeValue(String value, Map<String, String> textMap){
            Set<Entry<String, String>> textSets = textMap.entrySet();
            for (Entry<String, String> textSet : textSets) {
                //匹配模板与替换值 格式{{key}}
                String key = "${"+textSet.getKey()+"}";
    
                if(null != value && value.indexOf(key)!= -1){
                    String s = textSet.getValue();
                    value = s;
                }
            }
            //模板未匹配到区域替换为空
            if(checkText(value)){
                value = "NULL";
            }
            return value;
        }
    
        public static void refactorXWPFDocument(XWPFDocument doc) {
            try {
                buildParagraph(doc);
                buildTable(doc);
                /*List<XWPFParagraph> paragraphs = doc.getParagraphs();
                for (XWPFParagraph paragraph : paragraphs){
                    List<XWPFRun> runs = paragraph.getRuns();
                    for (XWPFRun run : runs){
                        System.out.println(run.toString());
                    }
                }*/
            } catch (Exception e) {
                e.printStackTrace();
            }
            //return doc;
        }
    
        public static void refactorParagraph(XWPFParagraph paragraph) {
            int start = -1;
            int end = -1;
            List<XWPFRun> runs = paragraph.getRuns();
            for (int i = 0; i < runs.size() ; i++) {
                String runText = runs.get(i).toString();
                if ('$' == runText.charAt(0)&&'}' == runText.charAt(runText.length() - 1)){
                    continue;
                }
                if ('$' == runText.charAt(0)){
                    start = i;
                }
                if ('}' == runText.charAt(runText.length() - 1)){
                    end = i;
                    break;
                }
            }
            if (start != -1){
                mergeRun(paragraph,start,end);
                refactorParagraph(paragraph);
            }
        }
    
      /*  public static void main(String[] args) {
            String runText ="";
            char c = runText.charAt(0);
            System.out.println(c);
    
        }*/
        public static void mergeRun(XWPFParagraph paragraph, int start, int end) {
            int removeCount = end-start;//删除次数
            int removeIndex = start+1;//删除开始位置
    
            List<XWPFRun> runs = paragraph.getRuns();
            for (int i = 0; i <runs.size() ; i++) {
                System.out.println(runs.get(i).toString());
            }
            StringBuilder sb = new StringBuilder();
            sb.append(runs.get(start).toString());
    
            for (int i = 0; i < removeCount; i++){
                sb.append(runs.get(removeIndex).toString());
                paragraph.removeRun(removeIndex);
            }
            runs.get(start).setText(sb.toString(),0);
        }
    
        public static Matcher matcher(String str) {
            Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(str);
            return matcher;
        }
    
    
        public static void buildParagraph(XWPFDocument document){
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                if (matcher(paragraph.getText()).find()) {
                    removeEmptyRun(paragraph);
                    refactorParagraph(paragraph);
                }
            }
        }
        public static void buildTable(XWPFDocument document){
            List<XWPFTable> tables = document.getTables();
            for (XWPFTable xwpfTable : tables) {
                List<XWPFTableRow> rows = xwpfTable.getRows();
                for (XWPFTableRow row :rows){
                    List<XWPFTableCell> tableCells = row.getTableCells();
                    for (XWPFTableCell tableCell : tableCells){
                        List<XWPFParagraph> paragraphs = tableCell.getParagraphs();
                        for (XWPFParagraph paragraph : paragraphs){
                            if (matcher(paragraph.getText()).find()) {
                                removeEmptyRun(paragraph);
                                refactorParagraph(paragraph);
                            }
                        }
                    }
                }
    
            }
        }
        private static void removeEmptyRun(XWPFParagraph paragraph) {
            List<XWPFRun> runsq = paragraph.getRuns();
            for (int i = 0; i <runsq.size() ; i++) {
                String runText = runsq.get(i).toString();
                if (StringUtils.isEmpty(runText)){
                    paragraph.removeRun(i);
                    break;
                }
            }
            for (int i = 0; i <runsq.size() ; i++) {
                String runText = runsq.get(i).toString();
                if (StringUtils.isEmpty(runText)){
                    removeEmptyRun(paragraph);
                    break;
                }
            }
        }
    
    }
    
    
    

    具体源码详见:https://download.csdn.net/download/qq_36244155/10805107
    源码下载后,用idea打开,maven加载依赖即可运行。
    也可以打包成demo-0.0.1-SNAPSHOT.jar后,
    用命令 java -jar demo-0.0.1-SNAPSHOT.jar 运行。
    访问地址:http://localhost:8080/#
    swagger访问地址:http://localhost:8080/swagger-ui.html

    展开全文
  • /// <summary>... /// 按照word模板文件 生成新word文件 /// </summary> /// <param name="tempFile">模板文件路径</param> /// <param name="saveFile">生...
           	/// <summary>
            /// 按照word模板文件 生成新word文件
            /// </summary>
            /// <param name="tempFile">模板文件路径</param>
            /// <param name="saveFile">生成文件路径</param>
            /// <param name="billRegister">议案登记</param>        
            public void CreateFileByTemplate(string tempFile,string saveFile, L1BillRegister billRegister)
            {
                using (FileStream stream = File.OpenRead(tempFile))
                {
                    XWPFDocument doc = new XWPFDocument(stream);
    
                    //遍历段落                  
                    foreach (var para in doc.Paragraphs)
                    {
                        ReplaceKey(para, billRegister);
                    }
    
                    //遍历表格      
                    foreach (var table in doc.Tables)
                    {
                        foreach (var row in table.Rows)
                        {
                            foreach (var cell in row.GetTableCells())
                            {
                                foreach (var para in cell.Paragraphs)
                                {
                                    ReplaceKey(para, billRegister);
                                }
                            }
                        }
                    }
                    FileStream out1 = new FileStream(saveFile, FileMode.Create);
                    doc.Write(out1);
                    out1.Close();
                }
            }
    		
    	/// <summary>
            /// 对模板中的值进行替换
            /// </summary>
            /// <param name="para">word文档对象</param>
            /// <param name="billRegister">议案登记对象</param>       
            private static void ReplaceKey(XWPFParagraph para, L1BillRegister billRegister)
            {
                string text = "";
                foreach (var run in para.Runs)
                {
                    text = run.ToString();             
                    if (text.Contains("a"))
                    {
                        run.SetText(billRegister.BillName, 0);
                    } 
                    else
                    {
                        run.SetText(text, 0);
                    }                
                }
            }
    		
    		
    	//调用
    	string tempFile = System.Web.HttpContext.Current.Server.MapPath("~/weboffice/tempfiles/meetSolutions.docx");
            string saveFile = System.Web.HttpContext.Current.Server.MapPath("~/weboffice/tempfiles/test/" + billRegister.BillId + ".doc");
    	this.CreateFileByTemplate(tempFile,saveFile, billRegister);
    

      

    转载于:https://www.cnblogs.com/YYkun/p/10242624.html

    展开全文
  • Java操作word模板文件

    万次阅读 热门讨论 2011-07-01 11:14:00
    关于导出word文档,之前想过用ireport但模板文件比较复杂不容易画。所以采取了Java操作word文件,替换word中的元素方法模板文件如下单位名称:$ACCTNAME$ NO: $SN$ 导出后效果:单位名称:XXXX科技股份有限司 NO: ...
  • 在项目需求中,需要对于一个word模板文档生成相对应的word文件,而此word模板是多页的并且需要在最终文件中生成相应的目录,由于项目环境是Linux,所以舍弃了jacob(windows环境)。然后主要是研究了Apache poi 进行...
  • JAVA使用POI-TL通过Word模板生成Word文件

    万次阅读 热门讨论 2018-08-15 16:04:24
    技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单....这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 官方网站 http://deepoove.com/...
  • Spring下载word模板文件

    千次阅读 2017-07-03 22:42:31
    1.使用Poi-tl,添加依赖<dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl<...poi-tl是一个java的模板引擎。GitHub主页:https://github.com/Sayi/poi-tl
  • 根据Word模板生成Word文件 (JAVA POI)

    千次阅读 2019-07-26 22:24:49
    通过提前准备的word模板,渲染填充数据,生成新的加工好的word文件。(也试过使用Freemarker渲染数据,但是有个很大的弊端:使用Freemarker模板文件会变得很大,大概为原来的十五至二十倍。) 用法 POI的...
  • POI使用word模板文件循环输出行并导出word

    万次阅读 热门讨论 2018-08-12 23:43:29
    * 设置模板路径 * @param tempLocalPath */ public void setTempLocalPath (String tempLocalPath) { this .tempLocalPath = tempLocalPath; } /** * 初始化 * @throws IOException */ ...
  • Csharp 简单操作Word模板文件

    千次阅读 2011-11-03 20:28:17
    1.创建一个模板的Word文档 Doc1.dot 内容为: To: Sub:   Website is ok geovindu 涂聚文好样的 work. CEo ... /// 簡單操作Word模板文件 /// 塗聚文 2011-11-03 /// 缔友计算机信息技术有限
  • 前言:java导出word有很多方式,这里介绍最简单...1、将list数据导出到word数据模板如图所示,字段的值暂时用数字1-7代替,这里说明一下为什么要用1-7的数字代替字段值,因为一会要把doc格式的文件转换成xml,这里如果
  • java根据word模板生成word文件

    千次阅读 2020-07-30 10:30:45
    1、首先新建一个word模板, 2、另存为xml格式, 3、将xml文件的扩展名直接改成ftl, 4、导入freemaker.jar 2、使用软件打开ftl文件,找到w:binData快速定位图片位置,写上${imgStr}(名字随意,和java代码中的对应...
  • 使用POI 导出word模板文件

    千次阅读 热门讨论 2019-03-21 11:29:32
    } } 文件导出工具类: public class POIWordUtil { /** * 根据模板生成新word文档 * 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入 * * @param inputUrl 模板存放地址 * @param outputUrl 新...
  • 二、基于docx格式文件创建模板: (1)替换数据占位符: (2)将替换数据占位符文件强制修改zip格式: (3)获取文本数据文件document.xml: (4)获取图片依赖文件document.xml.rels: (5)占位符修改为...
  • word模板以xml格式另存一份,得到xml格式模板 在xml 文件中,使用freemark标签,替换一些自定义值 使用freemark 解析xml ,输出到.doc 文件  在处理的时候要把文件后缀改成.ftl格式 获得自定义内容的word文件...
  • 先下载jacob.jar包。解压后将jacob.dll放到windows/system32下面或\jre\bin下面。将jacob.jar加入项目。 这样项目的环境基本上搭建完成,接下来就是书写相关...* word模板中所有要替换的字段(即HashMap中的Key)以特
  • Python批量处理Excel文件信息替换Word模板原由和思路工具准备1. 前期处理1.1 数据处理1.2 模板处理2. 编写代码2.1 使用Pycharm新建项目ExcelToWord2.2 新建ETW.py主程序文件并安装相应库2.3 主要代码块解析3. 打包...
  • java 根据模板文件生成word文档

    万次阅读 多人点赞 2018-09-19 16:18:05
    最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, ...
  • asp 使用word模板生成word文件

    千次阅读 2012-05-29 11:28:15
    根据word模板生成对应内容的word文档可供下载 解决: 打开word组件的权限。 步骤: 控制面板》管理工具》组件服务》计算机》我的电脑》DCOM配置》Microsoft Word 97 - 2003 文档》属性》 标识》下列用户》...
  • 读取word模板,并写入数据到word文件
  • 可以通过删除模板文件word重新自己生成模板文件来解决。 操作步骤如下: step 1:打开资源管理器,在地址栏输入内容并回车:%appdata%\microsoft\Templates step 2:关闭word程序 注:如果有word正在运行,...
  • Python通过word模板生成新的word文件

    千次阅读 2020-07-01 22:58:13
    功能自定义好的word文档,生成新的word文件 模块地址:https://docxtpl.readthedocs.io/en/latest/ 使用模块 docxtpl 安装方式 在线安装 pip install docxtpl 离线安装,需下载以下安装包 docxtpl-0.10.0.tar.gz ...
  • c#根据word模板生成word文档

    千次下载 热门讨论 2010-03-04 11:30:54
    c#根据word模板生成word文档 附件中包含程序源码以及word模板文件 需要引用的DLL已经在源码中标出
  • 最近做项目时,需要利用POI技术,在word文档中写表格,但是网上几乎搜索不到相关资料...读取模板文件获取所有的table: OPCPackage opcPackage = POIXMLDocument.openPackage(wordFilePath);  XWPFDocument doc = n
  • 根据制式模板批量生成 word 文件

    千次阅读 2019-04-01 15:21:30
    操作 word 其实是一件很痛苦的事情,但是有一点我们是可以尝试一下的,那就是根据制式的 word 模板批量生成文件,可以应用在政府机关某些文件下发里,再配合邮件发送功能。今天就给大家分享一下生成 word 文件的代码...
  • 实现思路:一 、 将别人提供的word 模板,另存为xml 格式的文件 ,得到xml模板二、在xml 文件中,使用freemark标签,替换一些自定义值三、 使用freemark 解析xml ,输出到.doc 文件 小结: 这里word文档就生成了 ...
  • 使用 poi 根据 word 模板生成 word 文件

    千次阅读 2015-11-17 17:49:28
    本例子是一个 maven 项目,要引入 poi 的依赖片段如下: <groupId>org.apache.poi <artifactId>poi <version>3.13 </dependency><!-- 支持Word文档的操作 --> <group
  • phpword 实现word文件模板字符替换

    千次阅读 2018-08-02 16:59:00
    最近公司有一个需求,是要给一个文件根据表格位置等自动填充内容,类似这样     红框内是要替换的内容,所以就需要用到PHPword模板替换功能,具体实现很简单,如下: 一、首先composer安装PHPword,就不多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,904
精华内容 25,161
关键字:

如何创建word模板文件