精华内容
下载资源
问答
  • 2021-08-12 04:00:33

    在日常工作中,我们可能常常需要打印各种文件资料,比如word文档。对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作。特别是提到Web打印,这的确会很棘手。一般如果要想选择非默认打印机或者说想显示打印设置对话框时,我们也需要对代码进行一定的设置。

    针对这样的问题,今天这篇文章我就来分享一下如何利用第三方组件 Spire.Doc来实现Word文档打印。

    详细步骤

    这是原来的word文档截图:

    7ca178652eda99c1d0552b13fe581ccb.png

    第一步:组件安装后,创建一个C#控制台项目,添加引用及命名空间如下:

    using System;

    using Spire.Doc;

    using System.Windows.Forms;

    第二步:实例化一个word文档对象,调用LoadFromFile方法加载待打印的word文档:

    Document doc = new Document();

    doc.LoadFromFile("sample.doc");

    第三步:实例化一个PrintDialog的对象,设置相关属性。关联doc.PrintDialog属性和PrintDialog对象:

    PrintDialog dialog = new PrintDialog();

    dialog.AllowPrintToFile = true;

    dialog.AllowCurrentPage = true;

    dialog.AllowSomePages = true;

    dialog.UseEXDialog = true;

    doc.PrintDialog = dialog;

    第四步:后台打印。使用默认打印机打印出所有页面。这段代码也可以用于网页后台打印:

    PrintDocument printDoc = doc.PrintDocument;

    printDoc.Print();

    第五步:如要显示打印对话框,就调用ShowDialog方法,根据打印预览设置选项,打印word文档:

    if (dialog.ShowDialog() == DialogResult.OK)

    {

    printDoc.Print();

    }

    这是打印文档过后XPS格式的屏幕截图:

    76ed92577ca84f5376760567ca2662ee.png

    全部代码:

    using System;

    using Spire.Doc;

    using System.Windows.Forms;

    namespace Doc_Print

    {

    public partial class Form1 : Form

    {

    public Form1()

    {

    InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)

    {

    // 实例化一个word文档对象

    Document doc = new Document();

    // 加载文档

    doc.LoadFromFile(@"C:\Users\Administrator\Desktop\示例文档.doc");

    // 实例化System.Windows.Forms.PrintDialog对象

    PrintDialog dialog = new PrintDialog();

    dialog.AllowPrintToFile = true;

    dialog.AllowCurrentPage = true;

    dialog.AllowSomePages = true;

    dialog.UseEXDialog = true;

    // 关联doc.PrintDialog属性和PrintDialog对象

    doc.PrintDialog = dialog;

    // 后台打印

    // PrintDocument printDoc = doc.PrintDocument;

    // printDoc.Print();

    // 显示打印对话框并打印

    if (dialog.ShowDialog() == DialogResult.OK)

    {

    //printDoc.Print();

    }

    }

    }

    }

    有兴趣的朋友自己也可以试一下, 谢谢浏览!

    在linux中使用php将word文档转为pdf

    使用本教程需要在linux中安装openoffice,改页面中有详细的安装与使用教程(http://www.cnblogs.com/sustudy/p/3999628.html). 既然,你看了该教程 ...

    Java Web项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...

    Java Web项目中使用Freemarker生成Word文档遇到的问题

    这段时间项目中使用了freemarker生成word文档.在项目中遇到了几个问题,在这里记录一下.首先就是关于遍历遇到的坑.整行整行的遍历是很简单的,只需要在整行的

    word文档自动生成方法

    创建word文档需要几个接口类,常用application,document,documents,selection等.但word的功能复杂,要认识到每一个类的功能是不可能的.常用的方法是在word的 ...

    Python处理PDF和Word文档常用的方法

    Python处理PDF和Word文档的模块是PyPDF2,使用之前需要先导入. 打开一个PDF文档的操作顺序是:用open()函数打开文件并用一个变量来接收,然后把变量给传递给PdfFileReade ...

    Word文档转PDF方法探索

    最近的项目中需要将Word转换为PDF文件,找了很多方法和组件,最后找到了一些方法,和大家分享. 一.使用微软官方自带转换方法 好处是写法方便,官方支持,缺点是需要在服务器上安装office,而且要配 ...

    Python处理PDF和Word文档常用的方法(二)

    Python处理word时,需要安装和导入python-docx模块. 安装命令:pip install python-docx 导入命令:import docx 编码编写顺序:用docx.Docum ...

    [php]在PHP中读取和写入WORD文档的代码

    测试平台windows 使用的windows的com主键. // 建立一个指向新COM组件的索引 $word = new COM("word.application") ...

    springboot中使用freemarker生成word文档并打包成zip下载(简历)

    一.设计出的简历模板图以及给的简历小图标切图         二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件:    三.直 ...

    随机推荐

    free 查看系统内存

    第二部分(-/+ buffers/cache):(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used – buffers – cached)(+buffers ...

    sublime2/3自总结经常使用快捷键(2的居多)

    Ctrl+D 选词 (重复按快捷键,就可以继续向下同一时候选中下一个同样的文本进行同一时候编辑) Ctrl+鼠标左键 能够同一时候选择要编辑的多处文本 Shift+鼠标右键(或使用鼠标中键)能够用鼠标 ...

    RAC下一个Fatal NI connect error 12170.错误处理

    原创作品,离 "深蓝blog" 博客,欢迎转载,请务必注明转载的来源.否则有权追究版权责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/a ...

    【socket编程】select manual page翻译

    原文: select manual page 依赖的头文件 /* According to POSIX.1-2001, POSIX.1-2008 */ #include

    清北学堂(2019 4 28 ) part 1

    今天主要用来铺路,打基础 枚举 没什么具体算法讲究,但要考虑更优的暴力枚举方法,例如回文质数,有以下几种思路: 1.挨个枚举自然数,再一起判断是否是回文数和质数,然而一看就不是最优 2.先枚举质数再判 ...

    css3+svg实现波浪图

    css+svg实现波浪图 ...

    Java 运行时常量池

    运行时常量池是方法区的一部分.class中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放在方法区的运行时常量池 ...

    hud1007 Quoit Design

    #include #include #include #include # ...

    水题系列一:Circle

    问题描述:Circle 小明在玩游戏,他正在玩一个套圈圈的游戏.他手里有 L 种固定半径的圆圈,每一种圆 圈都有其固定的数量.他要把这些圆圈套进 N 个圆形槽中的一个.这些圆形槽都有一个最 小半径和最 ...

    SQL-13 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。

    题目描述 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t.CREATE TABLE IF NOT EXISTS "titles" ( ...

    更多相关内容
  • 全部 12 notes 译文原稿Word文档打包.zip 讲义中文版。入门的极佳。
  • 当年证券从业资格考试基础知识考前模拟题及答案word文档打包下载.pdf
  • html页面导出word文档、批量生成word文档、并且在线生成压缩包并下载
  • 实现将多个word文件合并成一个word文档,整理两种方法,所需资料比较齐全,已经过测试,可直接下载使用。
  • Excel表格+Word文档2240个各类各行业模板打包下载【人力资源部达人10年终极收藏】.rar
  • pdf文档转word文档

    2022-04-15 20:09:12
    利用pdf2docx库,将pdf文件转换成word文件,最后打包成exe文件,免安装直接运行。
  • python自动办公-08 用Python设置Word文档里表格的格式.zip源码python项目实例源码打包下载python自动办公-08 用Python设置Word文档里表格的格式.zip源码python项目实例源码打包下载python自动办公-08 用Python设置...
  • python自动办公-07 一键往Word文档的表格中填写数据.zip源码python项目实例源码打包下载python自动办公-07 一键往Word文档的表格中填写数据.zip源码python项目实例源码打包下载python自动办公-07 一键往Word文档的...
  • python自动办公-09 用Python批量往Word文档中指定位置添加图片.zip源码python项目实例源码打包下载python自动办公-09 用Python批量往Word文档中指定位置添加图片.zip源码python项目实例源码打包下载python自动办公-...
  • Word文档授权打包加密

    2011-05-02 23:47:58
    能通过讲Word加密成EXE文件,从而能警醒一机一码授权,防止文件流失
  • java POI生成word.zip

    2019-08-16 17:49:26
    java POI导出word文档代码,可参考具体代码,两个类,根据自己情况参考 java POI导出word文档代码,可参考具体代码,两个类,根据自己情况参考
  • 如果使用源代码,需要先克隆该项目后运行mvn package打包,然后运行发布报中bin/start.bat 运行程序后按照下面提示输入对应数据库参数: choose database: 1:mysql 2:oracle 3:PostgreSQL Select the appropriate ...
  • 1.用的时候只要把jdbc.properties文件里的数据库配置改一下就可以了 2.要生成word文档就执行DocMain 3.要生成excel文档就执行ExcelMain
  • 加密word文档,支持*.doc;*.rtf;*.docx;*.docm; 保护word文档分发,防止编辑、防止复制、防止打印;用户打开受加密保护的文档时,加密文件会弹出验证框要求用户输入阅读密码,这个验证框中同时显示有用户的机器码,...
  • 电梯、电厂、厂方、仓库、车间等工业建筑施工组织设计方案(27个 word文档文件打包可供修改可编辑).zip
  • 学校、公司、办公楼等公共设施建筑类工程施工组织设计方案(31个文档 word文件打包可供修改可编辑)
  • 30份精美的WORD DOC格式程序员简历文档,对求职者有一定借鉴价值。内容如下:JavaEE---饶忠堂8500.docjava技术相关简历模板.docjava开发岗位简历模板(2).docjava开发岗位简历模板.docjava开发工程师简历模板.doc...
  • word模板格式,将需要替换的位置用&xx&占位符填上,在后台找到跟数据相同的名称时替换 #region 带模板导出 public HttpResponseMessage ExportWordModel(dynamic obj) { long formId = obj.id; ...

     

    word模板格式,将需要替换的位置用&xx&占位符填上,在后台找到跟数据相同的名称时替换

    #region 带模板导出
            public HttpResponseMessage ExportWordModel(dynamic obj)
            {
                long formId = obj.id;
                string selectedModel = obj.selectedModel;
                string tempFile = HttpContext.Current.Server.MapPath("~/ExcelModel/" + selectedModel).ToString();//获取模板路径
                string filePath = "导出模板文件的文件名"
                string filePathId = filePath + formId * 4564;//文件名加上一个唯一id组成的文件名, 防止表单名称重复,加上表单的唯一值id
                string saveFilePath = HttpContext.Current.Server.MapPath("~/SaveExcel/" + filePathId).ToString(); // 保存表格的路径
                try // 为空的时候会提示找不到文件夹
                {
                    ClearDownloadDirectory(saveFilePath, ""); //清空saveFilePath文件夹下的所有内容 保证每次导出时zip文件都是最新的
                }
                catch { }
                    var result = “你的数据” // 我这里result为json格式的所有后面需要序列号循环出来,具体看自己的数据格式
                    if (result.Count() != 0)
                    {
                        int num = 0; // 导出的时候给word文档命名
                        string fullPath = saveFilePath; //上传路径 
                        if (!Directory.Exists(fullPath))
                        {
                            Directory.CreateDirectory(fullPath); //如果路径不存在则创建
                        }
                        for (int i = 0; i < result.Count(); i++) // 把所有要导出的内容循环出来保存为docx
                        {
                            var formData = result[i].formData;
                            JArray tempData = (JArray)JsonConvert.DeserializeObject(formData);  //序列化(也可使用JToken代替JObject)
                            try
                            {
                                Document doc = new Document(tempFile);
                                int selectedNum = 0;// 循环的次数,第一次不要逗号
                                var dic = new Dictionary<string, string>();
                                dic = CommonFun.JsonToDir(tempData); // 将查到的json转换成dictionary
                                DocumentBuilder builder = new DocumentBuilder(doc);
                                foreach (var key in dic.Keys)//关键点 当模板里面找到和数据相同的字段,将数据写到模板对应的位置
                                {
                                    var repStr = string.Format("&{0}&", key);
                                    doc.Range.Replace(repStr, dic[key], false, false); // 循环出json 中的label 字段和模板里面进行比较 如果相等则替换成对应的value值
                                }
                                string fileName = filePathId + num++;
                                doc.Save(saveFilePath + "/" + fileName + ".docx");//也可以保存为1.doc 兼容03-07
                            }
                            catch
                            {
    
                            }
                        }
                    }
                    else
                    {
                        var response = new HttpResponseMessage();
                        response.StatusCode = HttpStatusCode.OK;
                        return response;
                    }
                    var respose = DownloadZip(filePathId); //将某个文件夹的所有内容导出成zip格式
                    return respose;
                }
              
            }
    
            #endregion

     ClearDownloadDirectory方法,当fileName为空的时候文件夹的所有内容全部删除

     #region 删除指定文件夹下的内容
            private void ClearDownloadDirectory(string directory, string fileName)
            {
                var files = Directory.GetFiles(directory);
                if (fileName == "") // 全部删除
                {
                    foreach (var file in files)
                    {
                        try
                        {
                            File.Delete(file);
                        }
                        catch
                        {
                        }
                    }
                }
                else
                {
                    foreach (var file in files)
                    {
                        if (file == fileName) // 中删除指定文件名
                        {
                            try
                            {
                                File.Delete(file);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
    
            }
            #endregion

    DownZip:

    #region 将整个文件夹打包成zip并下载
            public HttpResponseMessage DownloadZip(string filePath)
            {
                var response = new HttpResponseMessage();
                try
                {
                    var zipFileName = string.Format("{0}.zip", filePath);
                    var downloadDir = HttpContext.Current.Server.MapPath("~/SaveExcel/zip/" + filePath); // 组成的zip文件夹保存路径
                    var archive = $"{downloadDir}/{zipFileName}";
                    var temp = HttpContext.Current.Server.MapPath("~/SaveExcel/" + filePath); // 要组成zip文件的文件夹路径
                    if (!Directory.Exists(downloadDir))
                    {
                        Directory.CreateDirectory(downloadDir);
                    }
                    // 清空zip文件夹中的所有临时文件
                    ClearDownloadDirectory(downloadDir, ""); // 保证每次导出时zip文件都是最新的
                    Thread.Sleep(500);
                    using (var zip = new ZipFile())
                    {
                        // Make zip file
                        zip.AddDirectory(temp); // 组成zip文件
                        zip.Save(archive); // zip 文件保存
                    }
                    response.Content = new StreamContent(new FileStream(archive, FileMode.Open, FileAccess.Read));
                    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = zipFileName };
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                }
                catch (Exception ex)
                {
                    response.StatusCode = HttpStatusCode.InternalServerError;
                    response.Content = new StringContent(ex.ToString());
                }
                return response;
            }
            #endregion

     前端代码:

     this.$axios({
                method: 'POST',
                url: url, // 你对应后台的url
                responseType: 'blob',
                data: JSON.stringify({ id: this.selectedId, selectedModel: this.ruleForm.selectedModel })
              }).then((response) => {
                console.log(response)
                if (response.data.size === 22) {
                  _this.errorTip('找不到模板文件')
                } else if (response.data.size === 0) {
                  _this.errorTip('无数据')
                } else {
                  var blob = new Blob([response.data])
                  var downloadElement = document.createElement('a')
                  var href = window.URL.createObjectURL(blob) // 创建下载的链接
                  downloadElement.href = href
                  downloadElement.download = '导出模板文件.zip' // 下载后文件名
                  document.body.appendChild(downloadElement)
                  downloadElement.click() // 点击下载
                  document.body.removeChild(downloadElement) // 下载完成移除元素
                  window.URL.revokeObjectURL(href) // 释放掉blob对象
                }
                _this.loading = false
              })

    效果图:

    展开全文
  • Unity创建并写入word并且插入图片源码(亲测可用)
  • 一些大型的VC 项目源码收集整理 word版,本来不想放上的,觉得Word版的不太好阅读,而且也不能看运行效果,后来看了看,里面有些代码还是值得参考的,虽然这些教程整理的不是很集中,比较分散,不过为了更好的学习,...
  • (1)可行性研究报告.doc (3)数据要求说明书.doc (4)需求说明书.doc (5)用户手册.doc
  • Python加密word文档

    多人点赞 2021-08-15 18:38:23
    本期我们需要完成一个对word文档加密的程序。在翻阅了网上一些资料和文章后,认为使用‘异或’来加密word文档是比较方便且安全性有保障的。   在此之前,我们先了解一下异或是什么。简单来说,如果a、b两个值不...

      大家好,这里是滑稽研究所。本期我们需要完成一个对word文档加密的程序。在翻阅了网上一些资料和文章后,认为使用‘异或’来加密word文档是比较方便且安全性有保障的。
      在此之前,我们先了解一下异或是什么。简单来说,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。我们简单的梳理一下代码思路。代码分为两部分,加密和解密。
      1.加密
      把文件转换成二进制的格式,然后生成等长的随机密钥进行异或操作,得到加密后的二进制文件。这一步我们需要保留的数据有,加密后的文件和随机生成的密钥,当然他们都是一些二进制数。
      2.解密
      这一步就简单了,我们把加密后的文件和之前随机生成的密钥再进行一次异或操作,即可得到原本的二进制数,然后我们再把它转换成文本即可。
    OK,思路大致明了了,我们需要两个程序,加密程序接收str参数 ,运行完成会输出加密后的二进制word文档,和用于解密的二进制密钥。解密程序则需要接收两个int参数,分别为加密程序输出的两个二进制内容,异或之后输出原始文本。那么,上代码。
    加密代码:

    from secrets import token_bytes
    from docx import Document
    import docx
    import time
    ​
    def random_key(length):
        # token_bytes,函数接受一个int参数,用于指定随机字节串的长度。
        # int.from_bytes把字节串转换为int,也就是我们需要的二进制数
        key = token_bytes(nbytes=length)
        key_int = int.from_bytes(key, 'big')
        return key_int
    ​
    def encrypt(raw):
        raw_bytes = raw.encode()
        #参数big意为正序,little则输出反序。
        raw_int = int.from_bytes(raw_bytes, 'big')
        key_int = random_key(len(raw_bytes))
        return raw_int ^ key_int, key_int
    ​
    def decrypt(encrypted, key_int):
        decrypted = encrypted ^ key_int
        length = (decrypted.bit_length() + 7) // 8
        decrypted_bytes = int.to_bytes(decrypted, length, 'big')
        return decrypted_bytes.decode()def encrypt_file(path, key_path=None,):
        document = Document(path)
        all_paragraphs = document.paragraphs
        file = docx.Document()
        file2 = docx.Document()
    ​
        jkl = input('请输入希望保存的文件名:') + '.docx'for paragraph in all_paragraphs:
            # 打印每一个段落的文字
            zz,key = encrypt(paragraph.text)#print('加密:',zz)
            #print('key:', key)file.add_paragraph(str(zz))
            file.save(jkl)
    ​
            file2.add_paragraph(str(key))
            file2.save("key.docx")print('滑稽研究所出品!')
    print('仅支持英文文件名。')
    chenggong = encrypt_file(input('请输入需要加密的文件名:'))
    print("已完成!十秒后自动关闭")
    time.sleep(10)
    #生成加密文件
    

      通过 encode 方法,将字符串编码成字节串。int.from_bytes 函数将字节串转换为 int 对象。最后对二进制对象和随机密钥进行异或操作,就得到了加密文本。
    解密代码:

    from secrets import token_bytes
    from docx import Document
    import docx
    import time
    ​
    def random_key(length):
        # token_bytes,函数接受一个int参数,用于指定随机字节串的长度。
        # int.from_bytes把字节串转换为int,也就是我们需要的二进制数
        key = token_bytes(nbytes=length)
        key_int = int.from_bytes(key, 'big')
        return key_int
    ​
    def encrypt(raw):
        raw_bytes = raw.encode()
        raw_int = int.from_bytes(raw_bytes, 'big')
        key_int = random_key(len(raw_bytes))
        return raw_int ^ key_int, key_int
    ​
    def decrypt(encrypted, key_int):
        decrypted = encrypted ^ key_int
        length = (decrypted.bit_length() + 7) // 8
        decrypted_bytes = int.to_bytes(decrypted, length, 'big')
        return decrypted_bytes.decode()
    ​
    jjj = []
    kkk = []def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
        document = Document(path_encrypted)
        all_paragraphs = document.paragraphs
    ​
        do2 = Document('key.docx')
        all_p= do2.paragraphs
    ​
        for i in all_paragraphs:
            #str转int
            jiam = int(i.text)
            jjj.append(jiam)#print('加密:',jiam)
        #print(jjj)for k in all_p:
            #str转int
            key = int(k.text)
            kkk.append(key)#print('key:',key)
        #print(kkk)
    ​
        cc = zip(jjj,kkk)
        res = list(cc)
        return res
    #传入元组,或两个int。
    print('滑稽研究所出品!')
    print('警告,严禁修改密钥文件名!!!')
    print('直接输入文件名,无需格式后缀。')
    rr1 = decrypt_file(input("请输入需要破解文件的文件名(仅限.docx文件):")+'.docx')file = docx.Document()
    for i in rr1:
        ff = decrypt(*i)
        #print(ff)
        #print(type(ff))
        file.add_paragraph(ff)
    file.save("res.docx")
    print('解密完成,请在当前文件夹下提取文件!')
    print('十秒后自动关闭!')
    time.sleep(10)
    

      我们需要将两个程序打包成exe。运行加密程序得到的二进制word文档,可以给其他人,但密钥必须自己保存。当别人满足你的要求之后,我们可以把密钥和解密程序给他。注意,只对docx文件有效,且不可以修改密钥文件的名称,不然会报错,解密失败。
      运行结果:
      原始word文件。
    在这里插入图片描述
      加密后:
    在这里插入图片描述
      生成的key密钥:
    在这里插入图片描述

      加密后的文件和生成的密钥,放在解密程序文件夹下之后,会得到如下。我们得到了原文件,美中不足的是所有的首行缩进都消失了,变成了左对齐。
    在这里插入图片描述
      同样的文件,重新加密之后,会得到不同的加密文件和密钥。因此如果加密文件和密钥不匹配,即使他们的源文件是一样的,也是无法解密的。此外密钥丢失,加密的文件将永远不能解密。噢,我的上帝。如果有人能一个个试出来等长的随机密钥的话。如果猴子能写出来《巴黎圣母院》的话。
      如果你对异或文本加密感兴趣的话,可以看一下这篇文章,感谢该作者提供了思路。

    https://blog.csdn.net/xiaofeixia666888/article/details/102613213

    展开全文
  • 正好最近工作是制作投标文件,需要将数量较多的一些项目信息填入固定格式的投标文件word文档内。我就考虑通过Python实现自动读取excel里各项目信息,按照word模板文件自动生成对应项目名称的word文档,并在每个文档...

    使用PYTHON实现excel项目清单自动生成word文档

    项目简介

    最近在公司学了一点Python,想利用编程把部分工作自动化完成,减轻工作压力。正好最近工作是制作投标文件,需要将数量较多的一些项目信息填入固定格式的投标文件word文档内。我就考虑通过Python实现自动读取excel里各项目信息,按照word模板文件自动生成对应项目名称的word文档,并在每个文档的指定位置自动填入excel里对应项目的信息。
    软件功能比较简单。概况起来就是:1.依次读取excel表格里的项目名称,编号、人名、等信息;2.根据word模板文件,依次生成以项目名称为文件名的word文档,并在该文档指定位置插入对应项目的编号、人名、图片等信息
    ython

    软件环境

    Pycharm2021 、 Python3.7 (原来安装的是Python3.10,但是最后编译程序的时候报错,换成Python3.7就好了)、pip(版本不限)

    代码

    直接上代码
    需要引入的包,docx、docxtpl、openpyxl
    python-docx:可用于创建和编辑Microsoft Word(.docx)文件。官方文档:link
    具体使用方法看官方文档就好,挺不错的,必须注意的是,python-docx包是不能处理doc文件的,只能处理docx文件
    docxtp:一个很强大的包,其主要通过对docx文档模板加载,从而对其进行修改。官方文档:link
    openpyxl: 一个用于读/写Excel 2010 xlsx/xlsm文件的Python库,官方文档:link

    // 需要引入的包,docx、docxtpl、openpyxl
    
    
    from docx import Document
    from docx.shared import Inches
    from docxtpl import DocxTemplate, InlineImage
    from openpyxl import load_workbook
    import os
    
    print('********************投标文件自动填充工具V0.1********************')
    print('         ********************说明********************')
    print('根据模板文件(tb.docx)和投标项目清单文件(投标项目清单.xlsx)自动填充投标文件中的相关信息,批量生成投标文件')
    print('将招标文件内的投标模板拷贝到tb.docx文件里,在需要填入招标编号、分标编号、投标人等信息的地方键入形如:{{招标编号}}的文字')
    print('如:分标编号:后面填入{{分标编号}},程序就可以自动识别出标签所在位置并予以替换。')
    print('操作时只需在(投标项目清单.xlsx)文件里修改相应项目的招标编号、分标编号、投标人、法人、地址等信息后,双击main.exe即可。')
    print('程序在本目录下生成投标文件文件夹,投标项目清单内的项目会被读取并依次生成对应名称的投标文档')
    print('软件作者:bigblueman   联系方式3386026295@qq.com')
    
    def replace(obj):
        if obj is None:
            obj = ''
            return obj
        # 加载要填入的数据
    wb = load_workbook(r".\\投标项目清单.xlsx")  # 需要填入Word的Excel工作簿的地址
    ws = wb['采购需求一览表']  # 工作簿中表格的名称
    contexts = []
    for row in range(2, ws.max_row + 1):
        name = ws["H" + str(row)].value  # 字母代表表格中对应的列,顺序和列名一定要对应上
        fbbh = ws["D" + str(row)].value
        fbmc = ws["E" + str(row)].value
        zbbh = ws["B" + str(row)].value
        tbr = ws["U" + str(row)].value
        fr = ws["V" + str(row)].value
        addr = ws["W" + str(row)].value
        lxr = ws["X" + str(row)].value
        lxfs = ws["Y" + str(row)].value
        rq = ws["Z" + str(row)].value
        xmjl = ws["AA" + str(row)].value
    
        context = {"招标项目标段名称": name, "分标编号": fbbh, "投标人": tbr, "分标名称": fbmc, "招标编号": zbbh,"法定代表人":fr,"地址":addr,"联系人":lxr,"联系方式":lxfs,"日期":rq,"项目经理":xmjl}  # 变量名称与Word文档中的占位符要一一对应
        contexts.append(context)
    contexts
    
    # 创建要保存的文件夹
    os.mkdir("./投标文件")
    num = 0  # 在文件名称前加入序号,保证生成的文档顺序与Excel中的顺序保持一致,方便查找
    for context in contexts:
        #print(context["name"])
        #print(context)
    
        print ('\r' + " 完成%d个文件" %num ,end='',)
       # a=os.system('clear')
        if context["招标项目标段名称"] == None:
            brek
    
        #if context["name"] != none:
        num = num + 1
        #tpl = DocxTemplate(r"C:\\Users\\J2662\\PycharmProjects\\根据excel生成word\\tb.docx")  # 需要填入的Word文档的的地址
        tpl = DocxTemplate(r".\\tb.docx")  # 需要填入的Word文档的的地址
        tpl.render(context)
    
        tpl.save("./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num)
    
    #插入对应法人的身份证照片
        if context["法定代表人"] == 'AAA':
            file = "./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num
            document2 = Document(file)
            images = "sfz.jpg"
        # 在第一个表格的指定的单元格(第一行第一列)插入图片
           #run = document2.tables[0].cell(0, 0).paragraphs[0].add_run()
           #run.add_picture('sfz.jpg')                                     #插入图片
           #run = document2.tables[0].cell(0, 1).paragraphs[0].add_run()
           #run.add_picture(images,width=Inches(2))                        #插入指定宽度的图片
    
        #run = document2.tables[0].cell(1, 0).paragraphs[0].add_run()
        #run.add_picture('sfz.jpg'width = Inches (1.25))
            document2.save("./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num)
    
    

    你可以先用pycharm创建一个工程,将代码拷贝进去,再去安装需要的那几个包。安装方法是在file菜单下的settings里,找到Python interpreter,点击右侧列表上方的加号进行添加,在下一个界面里搜索需要的包,点击左下角的 install Package安装。
    在这里插入图片描述
    在这里插入图片描述

    1. Python下载地址:link,找到下载界面,下载3.7版本的。下载界面上有 Windows embeddable package版本的和 Windows installer版本的,选择 Windows installer下载。Python的安装,环境变量的添加请自行掌握。
    2. Pycharm 下载地址:link,可以下载免费的Community版本,如果有钱也可以用收费的Professional版。

    操作说明

    新建一个docx文档,将模板文件拷贝进去。我这里是投标文件。需要填写招标编号、分标编号、投标人,法定代表人、地址、联系人等信息,还有在指定位置放置身份证照片、财务状况表等。如果投标项目比较多,手工制作标书需要耗费较长时间。使用程序自动化填写,可以在几分钟之内完成。
    我们需要做的是在标书模板内需要插入文字的地方用花括号做标记。插入图片我是通过在需要插入图片的位置放置表格,让程序判断其是文档中的第几个表格来实现的,有没有其他方法我还没有试验。

    我们需要在项目文件夹下新建两个文件:

    tb.docx

    在这里插入图片描述在这里插入图片描述
    投标项目清单.xlsx
    在这里插入图片描述

    然后就可以运行程序了
    在这里插入图片描述
    生成的文件自动保存在投标文件文件夹内
    在这里插入图片描述
    打开文件看看,投标文件模板里填充的内容都填充完成了
    在这里插入图片描述

    功能调试完成后,打包成EXE文件发布需要用到pyinstaller包。在Pycharm
    里的Terminal窗口里执行pyinstaller 进行打包发布。具体操作略~~~~~
    在这里插入图片描述

    展开全文
  • word简历在线编辑-vue

    2019-01-17 11:55:14
    webpack ----打包神器 vue-cli ----快速构建项目 scss ----便利的css大法 element-ui ---- UI组件库 normalize.css ---- 重置掉该重置的样式 LeanCloud ---- 存储数据 html2canvas ---- HTML转成canvas jsPDF ...
  • 2014简历打包word

    2014-04-01 15:20:40
    2014 毕业生 简历 打包 Word版 很多份
  • Java自动生成带图片、富文本、表格等的word文档使用技术freemark+jsoup生成mht格式的伪word文档,已经应用项目中,确实是可行的,无论是富文本中是图片还是表格,都能在word中展现出来使用jsoup解析富文本框,将其中...
  • 欢迎加入Unity业内qq交流群:956187480 一:初始化路径 private string path; string path_Pic; string path_Pic_R; private XWPFDocument doc = new XWPFDocument();... Debug.Log("导出Word成功:" + R
  • word文档编辑技巧

    2014-05-20 13:39:32
    Word文档精确“减肥”五小招 68 如何用Word实现在网上开会 72 七种办法减少Word容量 74 隐藏在word汉字里面的玄机 75 Word技巧:一次特殊的查找和替换 78 在Word中为三位数字设置带圈字符 80 巧用Word输入生僻字 81...
  • 文档生成目录摘要二级目录三级目录 摘要 二级目录 三级目录

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,576
精华内容 9,030
关键字:

word文档打包