利用word模板导出word文件并下载到本地

 

/*----------------------------------------------------------------
// 文件名:WordExport.cs
// 文件功能描述:利用word模板导出word文件(内容支持类型:普通字符串、DataTable、图片、文件)
// 创建标识:鞠军 2011926
// 修改标识:
// 修改描述:
//----------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;
using Word = Microsoft.Office.Interop.Word;//.Net组件,要添加引用
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.UI.WebControls;
namespace BaseBusiness
{
    public class WordExport
    {
        /// <summary>
        /// 按模板导出word文档
        /// </summary>
        /// <param name="page">导出word文档的页面</param>
        /// <param name="strTemplateName">word模板名称</param>
        /// <param name="objDD">word模板中书签的名称集</param>
        /// <param name="objDDValue">书签值的集</param>
        public bool CreateWordFile(System.Web.UI.Page page,string strTemplateName, object[] objDD, object[] objDDValue)
        {
            //创建word对象
           Word._Application appWord = new Word.ApplicationClass();
           Word._Document docFile = null;
            try
            {
                Type t = null;
                appWord.Visible = false;
                object objTrue = true;
                object objFalse = false;
                //在webconfig中配置的存放word模板的相对路径
                string strFileName =System.Configuration.ConfigurationManager.AppSettings["FilePath"].ToString();
                //获取word模板完全路径
                string strFilePath = System.Web.HttpContext.Current.Server.MapPath(strFileName);
                //word模板文件
                object objTemplate = strFilePath + "\\" + strTemplateName + ".dot";
                object objDocType = Microsoft.Office.Interop.Word.WdDocumentType.wdTypeDocument;
                docFile = appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue);
                //给书签赋值
                for (int i = 0; i < objDD.Length; i++)
                {
                    t = objDDValue[i].GetType();
                    if (t.ToString() == "System.Data.DataTable")//DataTable赋给书签
                    {
                        DataTable dt = (DataTable)objDDValue[i];
                        Object Nothing = System.Reflection.Missing.Value;
                        //获取当前文档的位置
                        Word.Range wrdRng = docFile.Bookmarks.get_Item(ref objDD[i]).Range;
                      
                        Word.Table newWordTable = wrdRng.Tables[1];//当前文档位置的表格
                        newWordTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;//外框样式
                        newWordTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;//内框样式
                        for (int j = 0; j < dt.Rows.Count; j++)
                        {
                            newWordTable.Rows.Add(Nothing);//当前文档位置的表格中新增一行
                            for (int n = 0; n < newWordTable.Columns.Count; n++)
                            {
                                string strCollName = newWordTable.Rows[1].Cells[n + 1].Range.Text.Replace("\r\a", "").Trim();
                                string strValue = dt.Rows[j][strCollName].ToString();
                                newWordTable.Cell(j + 2, n + 1).Range.Text = strValue;
                                newWordTable.Cell(j + 2, n + 1).Range.Bold = 0;
                            }
                        }
                    }
                    else if (t.ToString() == "System.Web.UI.WebControls.Image")//图片赋给书签
                    {
                        Image img = (Image)objDDValue[i];
                        //插入图片
                        object LinkToFile = false;
                        object SaveWithDocument = true;
                        Word.Range wrdRng = docFile.Bookmarks.get_Item(ref objDD[i]).Range;
                        object Anchor = docFile.Bookmarks.get_Item(ref objDD[i]).Range;
                        wrdRng.InlineShapes.AddPicture(img.ImageUrl, ref LinkToFile, ref SaveWithDocument, ref Anchor);
                    }
                    else if (t.ToString() == "System.IO.FileInfo")//文件赋给书签
                    {
                        FileInfo file=(FileInfo)objDDValue[i];
                        //插入文件
                        object ClassType = "Word.Document.12";
                        object LinkToFile = false;
                        object DisplayAsIcon = true;
                        object IconFileName = file.Name;
                        object IconIndex = 1;
                        object IconLabel = file.Name;
                        Word.Range wrdRng = docFile.Bookmarks.get_Item(ref objDD[i]).Range;
                        object objRange = docFile.Bookmarks.get_Item(ref objDD[i]).Range;
                        object FileName = file;
                        wrdRng.InlineShapes.AddOLEObject(ref ClassType, ref FileName, ref LinkToFile, ref DisplayAsIcon, ref IconFileName, ref IconIndex, ref IconLabel, ref objRange);
                    }
                    else//字符串赋给书签
                    {
                        //插入字符
                        docFile.Bookmarks.get_Item(ref objDD[i]).Range.Text = objDDValue[i].ToString();
                    }
                }
              
                //生成的具有模板样式的新文件
                object filename = strFilePath + "\\" + strTemplateName + "_" + Guid.NewGuid().ToString() + ".doc";
                object fileformat = (int)Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument;//导出文件格式
                object miss = System.Reflection.Missing.Value;
                docFile.SaveAs(ref filename, ref fileformat, 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 = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
                docFile.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
                appWord.Quit(ref miss, ref miss, ref miss);
                docFile = null;
                appWord = null;
                //下载新生成的文件
                ExportWordFile(page, filename.ToString(), true, false);
                return true;
            }
            catch (Exception ex)
            {
                //捕捉异常,如果出现异常则清空实例,退出word,同时释放资源
                string aa = ex.ToString();
                object miss = System.Reflection.Missing.Value;
                object missingValue = Type.Missing;
                object doNotSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
                docFile.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
                appWord.Quit(ref miss, ref miss, ref miss);
                docFile = null;
                appWord = null;
                return false;
            }
        }
        /// <summary>
        /// 下载导出的文件------------有待改进
        /// </summary>
        /// <param name="page">导出word文档的页面</param>
        /// <param name="filefullname">文件完全路径</param>
        /// <param name="deleteAfterExport">导出文件后是否删除文件</param>
        /// <param name="endResponse">导出文件是否关闭会话</param>
        public void ExportWordFile(System.Web.UI.Page page, string filefullname, bool deleteAfterExport, bool endResponse)
        {
            try
            {
                if (File.Exists(filefullname))
                {
                    FileInfo fileinfo = new FileInfo(filefullname);
                    page.Response.Clear();
                    page.Response.ClearContent();
                    page.Response.ClearHeaders();
                    page.Response.Buffer = true;
                    page.Response.Charset = "utf-8";
                    //page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                    page.Response.ContentEncoding = System.Text.Encoding.UTF8;
                    page.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileinfo.Name, Encoding.UTF8));
                    page.Response.AddHeader("Content-Length", fileinfo.Length.ToString());
                    page.Response.AddHeader("Content-Transfer-Encoding", "binary");
                    //page.Response.ContentType = "application/ms-word";
                    page.Response.ContentType = "application/octet-stream";
                    byte[] sw = File.ReadAllBytes(Convert.ToString(filefullname));
                    page.Response.BinaryWrite(sw);
                    page.Response.Flush();
                    if (deleteAfterExport)
                    {
                        File.Delete(filefullname);
                    }
                    if (endResponse)
                    {
                        page.Response.End();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

      
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用第三方工具类库Hutool或者fr.opensagres.xdocreport来根据Word模板导出Word文档docx。其中,使用Hutool可以通过以下步骤实现: 1. 引入Hutool依赖: ``` <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.10</version> </dependency> ``` 2. 加载Word模板文件: ``` DocxWriter writer = new DocxWriter("template.docx"); ``` 3. 替换模板中的变量: ``` writer.replace("name", "张三"); ``` 4. 保存并关闭文件: ``` writer.flush(new FileOutputStream("output.docx")).close(); ``` 而使用fr.opensagres.xdocreport可以通过以下步骤实现: 1. 引入相关依赖: ``` <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.document.docx</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ``` 2. 加载Word模板文件: ``` InputStream in = new FileInputStream(new File("template.docx"));IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Freemarker); ``` 3. 创建数据模型并填充数据: ``` IContext context = report.createContext(); context.put("name", "张三"); ``` 4. 生成Word文档并保存: ``` OutputStream out = new FileOutputStream(new File("output.docx")); report.process(context, out); out.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值