精华内容
下载资源
问答
  • Word文档规范格式

    千次阅读 2014-03-18 22:26:42
    1、文档规范格式:要有封面、目录、标题、页眉。 2、封面中不允许有页眉、页码。 如何让封面没有页眉:把光标移到封面的最下面,然后就点击-----【插入】-----点击-----【分隔符】---点击---【下一页分节符】---...

    1、文档规范的格式:要有封面、目录、标题、页眉。

    2、封面中不允许有页眉、页码。

    如何让封面没有页眉:把光标移到封面的最下面,然后就点击-----【插入】-----点击-----【分隔符】---点击---【下一页分节符】---点击---【页眉和页脚】----默认会选中---【同前节】,但是我们要把【同前节】点掉,补选中它。然后在封面的下一页页眉处写入标题等。----然后---点击---【关闭】。

    在页眉中主要写标题。

    3、标题规范:

    1级标题----黑体二号+加粗

    2级标题----黑体三号+加粗

    3级标题----黑体小三号+加粗

    4级标题----宋体四号+加粗

    4、正文:    

    中文---宋体--小四

    英文---Times New Roman

    行距1.5倍---首行缩进两个字符(磅值大概为0.74厘米)

    5、图片: 居中

    6、表格: 宋体----五号  

    (第3--4通过设置新样式来规定)

    7、目录是选择自动生成

    (暂时先这样,后期完善内容)

    展开全文
  • python实现word文档批量转成自定义格式的excel文档

    千次阅读 多人点赞 2020-02-18 02:27:29
    最近在开发一个答题类的小程序,到了录入试题进行测试的时候了,发现一个问题,试题几乎都是word文档格式的,每份有100题左右,而且可能有几十份。 word文档是没有固定格式的,想批量录入关系型数据库mysql,必须先...

    python实现word转成自定义格式的excel文档(解决思路和代码)

    支持按照文件夹去批量处理,也可以单独一个文件进行处理,并且可以自定义标识符

    最近在开发一个答题类的小程序,到了录入试题进行测试的时候了,发现一个问题,试题都是word文档格式的,每份有100题左右,拿到的第一份试题,光是段落数目就有800个。而且可能有几十份这样的试题。

    而word文档是没有固定格式的,想批量录入关系型数据库mysql,必须先转成excel文档。这个如果是手动一个个粘贴到excel表格,那就头大了。

    我最终需要的excel文档结构是这样的:每道题独立占1行,每1列是这道题的一项内容,大概就是问题、选项A、选项B等等。
    在这里插入图片描述
    但word文档是这种结构,如果按照网上通用的方式去转,基本上你得到的结果就是一大坨文字都在一格里,根本不符合需求。
    在这里插入图片描述
    最后我想到了一个解决思路,可以实现这个需求,先看看我转出来的结果:
    在这里插入图片描述
    在这里插入图片描述
    这个格式虽然跟最终的有点差别,但是只要在excel文档或者在代码里稍微再修改一下,就能完全符合要求了。

    废话少说,先贴出代码,看得懂的可以直接拿去用,看不懂的,可以看我后面的具体说明。

    已经把它封装成通用脚本了,你可以直接调用。

    import pandas as pd
    import os
    
    # 初始处理函数1,先对初始处理结果进行判断
    def initail_handle_by_range(file_path, max_page_num, split_str):
        df = pd.read_table(file_path)
        # 2、先转成Series
        S = pd.Series(df['column1'].values)
        # 3、转成列表,列表的每个元素就是每个段落
        list = S.tolist()
        # 传入一个max_page_num
        # 4、遍历列表,取出每个段落,按“.”切割,取出第一个元素进行判断,如果它是题号,就应该得到"1"或者"10"
        index_list = []
        for content in list:
            try:
                # 不是每个段落都有“.”可以切割的,会报错,报错就跳过
                first_str = content.split('%s'%split_str)[0]
                # 5、根据最大的题号,自动生成匹配的字符串,用来匹配题号(每个匹配字符串都放在patch_list中)
                patch_list = ['%d' % i for i in range(1, max_page_num + 1)]
                # 6、比对切割得到的第一个元素,如果它在匹配的字符串中,就获取它在列表中的索引,并把获取到的结果添加到列表index_list中,这就知道了每道题的开头在l中的哪个位置了
                if first_str in patch_list:
                    index = list.index(content)
                    index_list.append(index)
            except:
                pass
        # 7、根据索引列表,我们可以知道每道题的第一段和最后一段在l中的哪个位置
        # index_list = [0, 8, 16]
        # print(index_list)
        # 先计算每道题长度是否一致,不一致的,设置is_same_length = False
        is_same_length = True
        length = index_list[1] - index_list[0]
        max_index = len(list)
        for i in index_list:
            # 如果i不是最后一个,那么start就是i,end就是i的下一个
            if i < index_list[-1]:
                start = i
                end = index_list[index_list.index(i) + 1]
            else:
                start = i
                end = max_index
            # 判断长度是否一致,不一致就对长度进行比较,把大的赋值给长度
            if (end - start) != length:
                is_same_length = False
                if (end - start) > length:
                    length = (end - start)
    
        result = [is_same_length, index_list, list, length]
    
        return result
    
    # 初始处理函数1,先对初始处理结果进行判断
    def initail_handle_by_patchstr(file_path, patch_str, split_str):
        df = pd.read_table(file_path)
        # 2、先转成Series
        S = pd.Series(df['column1'].values)
        # 3、转成列表,列表的每个元素就是每个段落
        list = S.tolist()
        # 传入一个max_page_num
        # 4、遍历列表,取出每个段落,按“.”切割,取出第一个元素进行判断,如果它是题号,就应该得到"1"或者"10"
        index_list = []
        for content in list:
            try:
                # 不是每个段落都有“.”可以切割的,会报错,报错就跳过
                first_str = content.split('%s'%split_str)[0]
                # 6、比对切割得到的第一个元素,如果它在匹配的字符串中,就获取它在列表中的索引,并把获取到的结果添加到列表index_list中,这就知道了每道题的开头在l中的哪个位置了
                if first_str == patch_str:
                    index = list.index(content)
                    index_list.append(index)
            except:
                pass
        # 7、根据索引列表,我们可以知道每道题的第一段和最后一段在l中的哪个位置
        # index_list = [0, 8, 16]
        # print(index_list)
        # 先计算每道题长度是否一致,不一致的,设置is_same_length = False
        is_same_length = True
        length = index_list[1] - index_list[0]
        max_index = len(list)
        for i in index_list:
            # 如果i不是最后一个,那么start就是i,end就是i的下一个
            if i < index_list[-1]:
                start = i
                end = index_list[index_list.index(i) + 1]
            else:
                start = i
                end = max_index
            # 判断长度是否一致,不一致就对长度进行比较,把大的赋值给长度
            if (end - start) != length:
                is_same_length = False
                if (end - start) > length:
                    length = (end - start)
    
        result = [is_same_length, index_list, list, length]
    
        return result
    
    
    # 传入一个文件路径和一个匹配的字符串,至少2个符号,例如"#."
    def file_handle_by_patchstr(file_path, patch_str, split_str):
        result = initail_handle_by_patchstr(file_path, patch_str, split_str)
        # 接收初始处理函数的结果
        is_same_length = result[0]
        index_list = result[1]
        list = result[2]
        length = result[3]
        # 先根据每道题的长度构造一个空的dict,最后用来生成dataFrame
        dict = {}
        for i in range(1, (length + 1)):
            dict['colomn%d' % i] = []
        # print(dict)
        max_index = len(list)
        for i in index_list:
            # 如果i不是最后一个,那么start就是i,end就是i的下一个
            if i < index_list[-1]:
                start = i
                end = index_list[index_list.index(i) + 1]
            else:
                start = i
                end = max_index
            # 遍历一轮获得的结果就是我们要写入excel的一行
            colomn = 1
            for index in range(start, end):
                # 遍历一次获得的结果就是我们要写入excel的一格
                content = list[index]
                # 每遍历一次就在一个dict中取出某一列,给它加上这个数据
                dict['colomn%d' % colomn].append(content)
                colomn += 1
                # 在遍历到最后一轮的时候
                if index == (end - 1):
                    # 判断是否需要插入空值
                    if not is_same_length and ((end - start) < length):
                        # 可能缺了2列,也可能缺了1列
                        content = ''
                        # 如果只是缺了一列,在现有的index上,加1,就是下一列,补上空值
                        if (length - (end - start)) == 1:
                            colomn = (end - start) + 1
                            dict['colomn%d' % (colomn)].append(content)
                        else:
                            # 如果缺失了2列以上,就遍历,给之后的每一列都补上空值
                            for i in range(length - (end - start)):
                                colomn = length - i
                                dict['colomn%d' % (colomn)].append(content)
    
        final_df = pd.DataFrame(dict)
    
        new_file_path = file_path.split('.')[0] + '.xlsx'
    
        final_df.to_excel(r'%s' % new_file_path)
    
    
    def file_handle_by_range(file_path, max_page_num, split_str):
        result = initail_handle_by_range(file_path, max_page_num, split_str)
        # 接收初始处理函数的结果
        is_same_length = result[0]
        index_list = result[1]
        list = result[2]
        length = result[3]
    
        # 先根据每道题的长度构造一个空的dict,最后用来生成dataFrame
        dict = {}
        for i in range(1,(length+1)):
            dict['colomn%d'%i] = []
        max_index = len(list)
        for i in index_list:
            # 如果i不是最后一个,那么start就是i,end就是i的下一个
            if i < index_list[-1]:
                start = i
                end = index_list[index_list.index(i) + 1]
            else:
                start = i
                end = max_index
            # 遍历一轮获得的结果就是我们要写入excel的一行
            colomn = 1
            for index in range(start, end):
                # 遍历一次获得的结果就是我们要写入excel的一格
                content = list[index]
                # 每遍历一次就在一个dict中取出某一列,给它加上这个数据
                dict['colomn%d' % colomn].append(content)
                colomn += 1
                # 在遍历到最后一轮的时候
                if index == (end - 1):
                    # 判断是否需要插入空值
                    if not is_same_length and ((end-start)<length):
                        # 可能缺了2列,也可能缺了1列
                        content = ''
                        # 如果只是缺了一列,在现有的index上,加1,就是下一列,补上空值
                        if (length-(end-start)) == 1:
                            colomn = (end-start) +1
                            dict['colomn%d'% (colomn)].append(content)
                        else:
                            # 如果缺失了2列以上,就遍历,给之后的每一列都补上空值
                            # 8-6 = 2, i = 0, 1
                            for i in range(length-(end-start)):
                                colomn = length - i
                                dict['colomn%d' % (colomn)].append(content)
        final_df = pd.DataFrame(dict)
    
        new_file_path = file_path.split('.')[0] + '.xlsx'
    
        final_df.to_excel(r'%s'%new_file_path)
    
    # 传入一个文件夹路径,最大的迭代数字,切割字符串
    def dir_handle_by_range(dir_path, max_page_num, split_str):
        files = os.listdir(dir_path)  # 获取当前目录的所有文件及文件夹
        for file in files:
            file_path = os.path.join(dir_path, file)  # 遍历获取每个文件的绝对路径
            result = initail_handle_by_range(file_path, max_page_num, split_str)
            # 接收初始处理函数的结果
            is_same_length = result[0]
            index_list = result[1]
            list = result[2]
            length = result[3]
    
            # 先根据每道题的长度构造一个空的dict,最后用来生成dataFrame
            dict = {}
            for i in range(1, (length + 1)):
                dict['colomn%d' % i] = []
            max_index = len(list)
            for i in index_list:
                # 如果i不是最后一个,那么start就是i,end就是i的下一个
                if i < index_list[-1]:
                    start = i
                    end = index_list[index_list.index(i) + 1]
                else:
                    start = i
                    end = max_index
                # 遍历一轮获得的结果就是我们要写入excel的一行
                colomn = 1
                for index in range(start, end):
                    # 遍历一次获得的结果就是我们要写入excel的一格
                    content = list[index]
                    # 每遍历一次就在一个dict中取出某一列,给它加上这个数据
                    dict['colomn%d' % colomn].append(content)
                    colomn += 1
                    # 在遍历到最后一轮的时候
                    if index == (end - 1):
                        # 判断是否需要插入空值
                        if not is_same_length and ((end - start) < length):
                            # 可能缺了2列,也可能缺了1列
                            content = ''
                            # 如果只是缺了一列,在现有的index上,加1,就是下一列,补上空值
                            if (length - (end - start)) == 1:
                                colomn = (end - start) + 1
                                dict['colomn%d' % (colomn)].append(content)
                            else:
                                # 如果缺失了2列以上,就遍历,给之后的每一列都补上空值
                                for i in range(length - (end - start)):
                                    colomn = length - i
                                    dict['colomn%d' % (colomn)].append(content)
    
            final_df = pd.DataFrame(dict)
    
            new_file_path = file_path.split('.')[0] + '.xlsx'
    
            final_df.to_excel(r'%s' % new_file_path)
    
    # 传入一个文件夹路径和一个匹配的字符串,至少2个符号,例如"#."
    def dir_handle_by_patchstr(dir_path, patch_str, split_str):
        files = os.listdir(dir_path)  # 获取目录的所有文件及文件夹
        for file in files:
            file_path = os.path.join(dir_path, file)  # 遍历获取每个文件的绝对路径
            print(file_path)
            result = initail_handle_by_patchstr(file_path, patch_str, split_str)
            # 接收初始处理函数的结果
            is_same_length = result[0]
            index_list = result[1]
            list = result[2]
            length = result[3]
            # 先根据每道题的长度构造一个空的dict,最后用来生成dataFrame
            dict = {}
            for i in range(1, (length + 1)):
                dict['colomn%d' % i] = []
            # print(dict)
            max_index = len(list)
            for i in index_list:
                # 如果i不是最后一个,那么start就是i,end就是i的下一个
                if i < index_list[-1]:
                    start = i
                    end = index_list[index_list.index(i) + 1]
                else:
                    start = i
                    end = max_index
                # 遍历一轮获得的结果就是我们要写入excel的一行
                colomn = 1
                for index in range(start, end):
                    # 遍历一次获得的结果就是我们要写入excel的一格
                    content = list[index]
                    # 每遍历一次就在一个dict中取出某一列,给它加上这个数据
                    dict['colomn%d' % colomn].append(content)
                    colomn += 1
                    # 在遍历到最后一轮的时候
                    if index == (end - 1):
                        # 判断是否需要插入空值
                        if not is_same_length and ((end - start) < length):
                            # 可能缺了2列,也可能缺了1列
                            content = ''
                            # 如果只是缺了一列,在现有的index上,加1,就是下一列,补上空值
                            if (length - (end - start)) == 1:
                                colomn = (end - start) + 1
                                dict['colomn%d' % (colomn)].append(content)
                            else:
                                # 如果缺失了2列以上,就遍历,给之后的每一列都补上空值
                                for i in range(length - (end - start)):
                                    colomn = length - i
                                    dict['colomn%d' % (colomn)].append(content)
            final_df = pd.DataFrame(dict)
            print(final_df)
            print(file_path)
    
            new_file_path = file_path.split('.')[0] + '.xlsx'
            print(new_file_path)
    
            final_df.to_excel(r'%s' % new_file_path)
    
    
    if __name__ == '__main__':
        # 文件路径
        # file_path = r'C:\Users\Administrator\PycharmProjects\exchange_file\2018-04 技能操作真题.txt'
        # 文件夹路径
        dir_path = r'C:\Users\Administrator\PycharmProjects\exchange_file\mytest'
    
        # 根据数字处理具体文件,参数传文件路径,可迭代的最大数可自定义,分隔符也自定义
        # file_handle_by_range(file_path, 100, '.')
    
        # 根据自定义匹配符处理具体文件,参数传文件路径,匹配符可以自定义,切割符也可以自定义
        # file_handle_by_patchstr(file_path, '#', '.')
    
        # 根据数字处理具体整个文件夹,参数传文件路径,可迭代的最大数可自定义,分隔符也自定义
        # dir_handle_by_range(dir_path, 100, '.')
    
        # 根据自定义匹配符处理具体文件夹,参数传文件路径,匹配符可以自定义,切割符也可以自定义
        # dir_handle_by_patchstr(dir_path, '#', '.')
    

    一、先说一下实现这个需求的处理逻辑

    解决这个需求的关键点是什么:
    1、python怎么读取这个文件的内容?
    python有相关的word操作库可以读取,但是读取到的结果不方便操作。我们最终是要让它生成excel文件的,所以可以用python非常强大的科学计算包pandas来读取操作数据更好。

    但pandas不能直接读取word文件,所以,需要先把它转成txt文档,这一步很简单,打开word,全部复制到一份新的txt文件中就行了。(注意要在第一行给它加上列名,我直接加了个colomn1,代表是第一列)
    简单处理后的txt文档的结构类似这样:
    在这里插入图片描述

    2、读取到的数据如何处理?
    使用pandas读取到的数据是一个dataFrame,dataFrame的结构就类似于我们在excel文档里面那样行列分明的。但是,它从txt读取出来的格式是全部内容都视为1列的,而txt中的每一段,在它这里就是每一行(注意是每一段对应一行,而不是每一行对应每一行)
    预览一下:结果显示800行,1列。也就是在txt文档中有800个段落。
    在这里插入图片描述
    3、接下来怎么处理呢?
    pandas强大的地方就在这里了,它可以直接把这1列的内容全部转成Series,Series是什么你可以不用管,你只需要知道Series可以直接转成列表list就行了。有了list我们就方便操作了。

    以上几步就实现了从word里面读取数据,并转化成python的数据类型list了。list里面的每个元素,就等同于我们word里面的每一个段落。
    控制台打印出来的就是这样:
    下面的800是计算出这个列表的长度,代表有800个元素。
    在这里插入图片描述

    接下来我们的需求就变成了:怎么把一个列表,转成有明确行列结构的excel表格了。

    这个要分为2种情况来说:
    1、你的word文档结构相对合理些,每道题都固定是X个段落(例如每道题都是8个段落),这个解决就很简单了。因为这种情况对应就是在list中,每8个元素构成了1道题,你只要按照规律,8个8个取出,最后批量写入excel就行了。(这种解决起来比较简单,就不详细说了)

    2、另一种情况比较麻烦,就是word文档的结构不规范,有的题目可能是8个段落,有的可能是7段,有的是6段。那么要怎么解决呢?

    解决这个问题有几个关键点:
    1、excel表格是行列结构的,它每一行的数据来源于这个txt文档的第几行?(也就是list里面的第几个元素)
    所以我们只要把每道题在list中的索引找出来就行了。

    观察一下源数据,它每道题的开头都是数字加1个英文符号“.”,例如:“1.”和“2.”,最大的是"100.",并且其他段落的开头都不会出现这个结构。那么就简单了,我先构造出一个patch_list=[‘1’, ‘2’, ‘3’…‘100’],用来做匹配。

    然后再遍历源数据列表,对列表的每个元素按“.”号切割,切割后拿到它的第一个元素,拿这个元素跟pacth_lis进行匹配,如果它是在patch_list中的,就代表它是每道题的开头。此时就记录下它的索引,并且把这个索引值存放到一个新列表index_list中。
    下面是我获取到的index_list:
    在这里插入图片描述
    0代表了第一道题是在列表的第1个元素开始的,8代表第二道题在列表的第9个元素开始。

    于是我们就知道每道题的开头是在列表中的哪个位置了。

    2、拿到了每道题的索引,然后怎么做呢?
    最终我们是要转存到excel文档中的, pandas怎么转excel?
    很简单的,只要你构造出一个dataFrame出来,调用pandas的to_excel方法,就能存入excel文档了。

    3、问题的关键就变成了,有了每道题的索引,怎么把它转成dataFrame结构。
    下面演示一下,假如你想要构造一个dataFrame,需要什么样的数据结构,构造出来的dataFrame在控制台的输出结果是怎么样的,最后生成的excel表格是怎么样的。

    dict = {'colomn1': ['问题1', '问题2', '问题3'],
            'colomn2': ["A:问题1的A选项", "A:问题2的A选项", "A:问题3的A选项"],
            'colomn3': ['B:问题1的B选项', 'B:问题2的B选项', 'B:问题3的B选项']}
    
    df = pd.DataFrame(dict)
    
    print(df)
    
    df.to_excel(r'C:\Users\Administrator\PycharmProjects\exchange_file\test.xlsx')
    

    这个就是调用pandas的DataFrame方法,用字典dict生成的一个dataFrame数据。
    这个dataFrame在控制台打印出来就是:
    在这里插入图片描述
    这个结构存入excel就是对应表格的行和列了。这个结构就符合我的实际需求了。
    在这里插入图片描述

    所以我们要构造出这个dataframe的关键就是:
    把所有数据梳理一遍,构造成类似这样的一个字典:

    dict = {'colomn1': ['问题1', '问题2', '问题3'],
            'colomn2': ["A:问题1的A选项", "A:问题2的A选项", "A:问题3的A选项"],
            'colomn3': ['B:问题1的B选项', 'B:问题2的B选项', 'B:问题3的B选项']}
    

    那么怎么构建这个dict呢?

    我们源数据转出来的list结构是类似这样的:
    list = [‘问题1’,“A:问题1的A选项”, ‘B:问题1的B选项’…‘问题2’,“A:问题2的A选项”, ‘B:问题2的B选项’]

    而我们前面得到的index_list=[0, 8, 16。。。。]
    它记录了“问题1”,“问题2”等等直到“问题100”是在哪个位置开始的,所以我们只需要把index_list遍历一下,轮流取出它的每个元素,它就是每道题的开始位置,然后拿到紧跟在这个元素的下一个是什么,用这个减去1就知道了每道题的开始位置start和结尾位置end是多少了。

    接着使用

    for i in range(start, end):
    	content = list[i] 
    

    就可以轮番从list中取出每道题的各项内容,取到的第一个就加到dict的colomn1列表中,第二个就加到dict的colomn2中,按照这个规律,就能把list的内容分开插入到dict中的各个列表中了。

    但在这个过程中,可能你每道题的段落数目不一致,也就是你按照这个规律从list中取出的元素,可能每次取出的数量都不一样。这点需要注意,如果没有对它进行处理,最后会导致转出来的文件内容错位了,例如你的文档里面,第一题有8个段落,第二题只有7个,第三题有8个段落,没处理这个问题的话,最后第三题的第8个段落,就会跑到第7题那边了。并且最终dataFrame会无法生成excel文件。

    那么这个问题怎么解决呢?

    在正式调用处理函数生成excel文件之前,可以先对文件预处理,拿到它们的数据进行判断,如果判断到它每个间隔不一样,有的缺少段落,那么就让数据预处理函数返回一个值为False,间隔一样就返回True。接着在真正的数据提取环节,根据这个进行判断,如果判断到它值是Fales,那么就在每一轮遍历提取数据的最后一次遍历,一次性在它后面的缺失数据的列加上空字符串,作为占位用,这样最后得到的列表长度就都一样了,并且在最后生成的excel表中,它是一个空格。

    最后用dict生成dataFrame,再写入excel文档,我们就大功告成了。

    二、再说一下具体怎么使用:

    一、运行必须的工具
    1、python解释器(pycharm或其他);
    2、python自带模块:os;
    3、自行安装模块:pandas,openpyxl;

    自行安装的模块,在控制台pip install pandas和pip install openpyxl就行了。

    二、怎么调用:
    1、先要做数据预处理:
    先要把word文档的内容复制到txt文档中,并且在第一行加上"column1",处理后像下面这样:
    在这里插入图片描述
    接着要看你的文档内容是否有题号,如果有的话:
    比如像我这个,有具体的题号1-100题,并且它的写法都是“1.”,在题号后面跟了个英文字符’.‘,顺序递增到100。
    在这里插入图片描述
    那么你就可以调用file_handle_by_range。
    你给它传第一个参数是个具体的文件路径,它就会去打开这个文件,读取里面的内容。

    传的第二个参数是100,它就会自动生成1到100的字符串,用来匹配识别你的每道题的开头在哪个位置。(如果你最大的题号是200,就写200,可以写多,但不能写少,少了识别到的内容会缺失)

    传的第三个参数是’.‘,它就会按照’.'去切割每一行的内容,拿到第一个“.”号前面的内容,用来跟它生成的匹配字符做比对,比对成功了,它就默认该行是你想要写到excel表格里的第一列,接在它后面的每个段落,会自动插入到它后面的列。

    直到匹配到下一个“数字.”开头的,又重复这个过程。

    如果你的文档里面并不是像我这样,没有顺序递增的题号,你可以手动给每个你想要放在表格中第一列的段落,在它前面加标识符,例如“####.”,注意最后是有个小点的。
    像下面这样:
    在这里插入图片描述

    接着调用

    file_handle_by_patchstr(file_path, '####', '.')
    

    那么它就默认按照’.‘去切割每行内容,并且按照####来匹配识别切到的内容,如果切到在’.'前面的是“####”,那么它就默认这一段是你想存到excel表第一列的段落,在它后面的几段,都会按照每个段落存入一格去处理。直到下一个“####.”出现。

    2、可调用的有4个函数:
    2.1、假如你只想处理一个具体的文档,并且它有具体的题号,最大题号是100,并且它后面跟的是一个’.’,那么就按照下面这个调用

    file_path = r'C:\Users\Administrator\PycharmProjects\exchange_file\2018-04 技能操作真题.txt'
     file_handle_by_range(file_path, 100, '.')
    

    2.2、根据自定义匹配符处理具体文件,参数传文件路径,匹配符可以自定义,切割符也可以自定义

    file_path = r'C:\Users\Administrator\PycharmProjects\exchange_file\2018-04 技能操作真题.txt'
    file_handle_by_patchstr(file_path, '#', '.')
    

    2.3、根据数字处理具体整个文件夹,参数传文件路径,可迭代的最大数可自定义,分隔符也自定义。(注意文件夹路径,最后是不跟文件名的,它是个文件夹,不是具体文件路径)

    # 文件夹路径
    dir_path = r'C:\Users\Administrator\PycharmProjects\exchange_file\mytest'
    dir_handle_by_range(dir_path, 100, '.')
    

    2.4、根据自定义匹配符处理具体文件夹,参数传文件路径,匹配符可以自定义,切割符也可以自定义

    # 文件夹路径
    dir_path = r'C:\Users\Administrator\PycharmProjects\exchange_file\mytest'
    dir_handle_by_patchstr(dir_path, '#', '.')
    
    展开全文
  • Word文档格式的解码分析

    万次阅读 2013-01-18 21:41:35
    最近发现从网上复制粘贴到一个word文档中的奇特的格式问题:浏览器网页上是正常的,如左图,可是粘贴到word中则成右图那样,行首出现了个奇怪的符号: ,不知何故,而且无论如何清除格式也去不掉: 于是...

    文章原创,转载请注明出处

    最近发现从网上复制粘贴到一个word文档中的奇特的格式问题:浏览器网页上是正常的,如左图,可是粘贴到word中则成右图那样,行首出现了个奇怪的符号:

    ,不知何故,而且无论如何清除格式也去不掉:

    于是决定看看word文档是怎么编码的。

    新建一个word文档,输入内容如下:

    保存之后用UitrlEdit以二进制打开保存的一个word文档,居然发现文件首为PK开头,那说明是就一个压缩文件包了,尝试将该word文档的后缀改为.zip,然后用解压缩软件居然果然能够正常解压缩,得到如下图所示的一些文件:

    [Content_Types].xml文件中记录这个文件夹下所有文件的清单:

    打开docProps文件夹如下图所示:

    App.xml文件中的内容:

    Core.xml中的信息就是通常我们直接文件右键得到的文件信息了

    打开word文件夹就看到该文档的核心内容了:

    为了解决自己的问题个人是对document.xml文件感兴趣了,打开之

    绿色圆圈中的字符就是自己在该word文档中输入的字符内容了“132132453书写规范采用和”居然被分成了两个部分分别标记和保存了。整个文件是各种标记的集合,包含了每部分字符所用的字体和对应的格式。用户字符在文档正文“w:body”标记之中并且以“w:t”标记分割保存,“w:pgMar”标记记录了字符串的对齐格式吧,应该是以像素单位来定位的,其他还有“w:gutter”分割线信息,“w:cols w:space”文档列信息,“w:rFonts”字体信息等等。

    接着将有奇怪字符的字符串保存在一个新建的word文档中,清除所有的格式,如下

    保存并以压缩文件包打开分析其内容,发现原来字符串前面那个标记是一个书签符号:<w:bookmarkStartw:id="0" w:name="t1"/><w:bookmarkEndw:id="0"/>

    所以要去除那个符号就比较好办了,直接鼠标定位到那个符号处然后通过word的“插入”菜单中的“书签”按钮,得到书签编辑对话框:

    然后点击删除按钮就可以去掉那个记号了,结果如下图所示:

    看来通过对word文档的分析,了解了其编码和组成对于以后恢复损坏的word文档或者对word文档中的数据进行分析处理也会有帮助的。

    展开全文
  • Word文档中最规范页面设置如何设置

    千次阅读 2019-04-01 11:11:20
    1.用Word文档打开我们要设置的公文,打开后查看菜单工具栏中的页面设置标签,点击,我们会发现有页边距、纸张大小等等设置。 点击下拉菜单,出现页面设置按钮,标准的公文板式是上页边距37mm,下页边距35mm,左页...

    自动转换工具:https://app.xunjiepdf.com/

    1.用Word文档打开我们要设置的公文,打开后查看菜单工具栏中的页面设置标签,点击,我们会发现有页边距、纸张大小等等设置。

    Word文档中规范的公文页面设置如何设置

    1. 点击下拉菜单,出现页面设置按钮,标准的公文板式是上页边距37mm,下页边距35mm,左页边距28mm,右页边距26mm,设置好后点击确定按钮。

      Word文档中规范的公文页面设置如何设置

    2. 标准公文都是选择A4纸进行打印和编辑,这个较以前有所改变,以前政工文件都是16k纸张编辑和打印,改革后统一都是A4纸张,所以非特别需要,公文都设置为A4。

      Word文档中规范的公文页面设置如何设置

    3. 然后是设置页码,页码设置在菜单栏的插入标签中,这里可以设置页眉、页脚,当然我们首先要考虑好页码显示在页眉还是页脚,以及显示的格式等等信息。

      Word文档中规范的公文页面设置如何设置

    4. 点击插入标签中的页码合适设置按钮,我们首先设置页码格式,公文的页码一般为单双页位置不同,页码的显示样式为阿拉伯数字,左右各用短线连接,如:-1-。

      Word文档中规范的公文页面设置如何设置

    5. 在双页中点击页脚设置,在页脚设置中双页的页码显示在左下角,单页的页码显示在右下角,打印室双面打印,便于阅读,而且节省纸张,如图所示。

      Word文档中规范的公文页面设置如何设置

      Word文档中规范的公文页面设置如何设置

    6. 设置好后,点击确定按钮然后浏览效果。公文的页面设置有标准的要求,按照标准设置的公文,版式漂亮而且便于阅读。当然公文的字体设置也有规范要求,这里不再赘述。

      Word文档中规范的公文页面设置如何设置

    展开全文
  • 最新版国标 GB8567-2006 软件工程开发文档 模板 word版本,内含软件开发的各个阶段所需编写的文档
  • 项目做完后一般会要求写文档,其中包括两部分一是代码文档,一是数据库文档我一般使用navicat管理数据库,在...经过尝试navicate是不行的phpmyadmin虽然有word格式导出,但不包含注释(是不是很蛋疼) 经过我尝试每...
  • Freemarker生成word文档

    千次阅读 2017-04-19 17:47:24
    Freemarker生成word文档,包含单条数据,多条数据,图片
  • java导入word文档

    千次阅读 2019-04-12 11:31:09
    Word文档分为两种格式,.doc和OOXML规范的.docx,在poi中也有相应的类包处理。 而doc文件的格式一般都不为2003版的doc文件格式,可能为rtf、xml等格式。 Maven依赖 <!-- ...
  • Java Web项目中使用Freemarker生成Word文档

    万次阅读 多人点赞 2014-09-21 15:33:20
    Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的...
  • 使用Word编辑文档时,我们常常需要设置页码。  如果一篇文档或一份报告需要跳过封面和目录,从正文开始设置页码,那么该如何设置呢?  假设文档的第一页和第二页是封面和目录,我们需要从第三页的正文开始设置...
  • Swagger文档Word 文档

    千次阅读 2019-06-13 09:10:00
    最后,还是领导有办法:要不我们把Swagger的 json文件转成word文档吧! 一直坚持一句话。作为使用者,人要迁就机器;作为开发者,要机器迁就人。 二、思路 领导提供了一个接口模板,类似下面这样,其实就是一个word...
  • Java解析word文档

    千次阅读 2017-02-14 15:35:00
    在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档。 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率都较高。 疑难点 ...
  • Word文档打不开怎么办

    千次阅读 2015-10-29 14:23:15
    目前一些主流的办公软件给大家日常工作带来了很大便利,比如:Microsoft Office或金山WPS...今天就给大家讲讲Word文档打不开了怎么办? 1. 如果是大家在个人电脑上编辑完成的文档,其实在电脑中是有备份的,可以通过Of
  • poi操作word文档总结

    万次阅读 2014-06-05 17:18:43
    POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量。...后来找到方法可以分段落读入纯word文档。要找到了word基
  • SAP ABAP里提供了一个标准的类CL_DOCX_DOCUMENT,提供了本地以”.docx”结尾的微软...从微软 Office2007开始, 当我们新建一个word文档时,其扩展名从“.doc”变为了”.docx”,后者是基上遵循了一个开源的规范:...
  • 项目过程管理(三)文档组织规范

    千次阅读 2019-02-28 16:11:49
    所有文档以在线文档系统(Online Documentation System,下文简称ODS)为中心进行管理,ODS不方便存放的东西才放到SVN(或Git)。因为ODS有URL链接可以点击直达,比起基于电脑文件系统的管理方便得多,且直接支持...
  • Java项目中使用Freemarker生成Word文档

    千次阅读 2016-06-19 09:58:49
    Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入...
  • Office 文档解析 文档格式和协议

    千次阅读 2020-07-08 07:58:25
    本文讨论的 Office 文档指的是 Office 2007 及以后的 PPTX 和 xlsx 等格式的文件。在 Office 2007 之前使用的不公开标准的二进制格式定义。在 Office 2007 之后的文档格式使用 OOXML 国际标准定义,本文将告诉大家这...
  • Word文档多级标题自动编号设置

    千次阅读 2020-10-12 09:01:18
    Word文档标题的自定义设置,以及编号的自动生成
  • word文档摘要信息的获取

    千次阅读 2011-01-17 09:51:00
    本文介绍了通过程序自动获取word文档摘要信息的方法
  • JAVA Freemarker 导出word文档实例带有图片

    千次阅读 热门讨论 2017-03-08 15:13:38
    本实例是使用freemarker 将数据导出word文档,其他的也可以实现 实现导出word文档的步骤如下: 1.用户提供样例word文件 2.分析样例word文件,制作word模板文件(xml格式的) 3.将步骤2中制作好的xml格式的模板文件...
  • 完整接口文档见http://download.csdn.net/download/qq_36467463/10214090
  • 用好Word文档结构图

    千次阅读 2009-09-11 12:01:00
    其实Word如果使用了文档结构图就可以方便的选择段落。有没有什么方法使文章一目了然?有,就是Word文档结构图。1.认识文档结构图?“文档结构图”是一个独立的窗格,能够显示文档的标题列表。如图1,就是本篇文章...
  • 读取Word文档的各种复杂表格内容

    千次阅读 2018-04-14 15:30:21
    工作上遇到如何读取Word文档中的表格内容,表格是有业务数据意义的,而且有一定规则的,因此不能直接读取表格文本,而是遍历表格单元格进行一行一列读取。表格规则:(1)表格可以有表头,表头也有业务意思(2)一...
  • 解析word文档2

    千次阅读 2009-02-03 11:23:00
    项目中还有一个问题,就是提取数据,如果从xml中提取那就方便一些,但是直接解析成xml的话会导致出现很多的垃圾标签,无意中,把word转txt然后在转xml,垃圾标签就减少了很多。提供源码 package office.syec.lyc;...
  • java实现的导出word文档

    万次阅读 2016-11-24 12:53:49
    之前没有做过类似的功能,所以第一次接触的时候费...然后在线格式化一下,这样生成的代码比较规范,然后将后缀修改为ftl,内容为一下格式:、 我使用的方法是通过Action跳转的方法来进行调用的,Action方法如下, pu
  • 一般而言,网上一些比较知名的讯息网站的文章内容常常都是使用pdf格式的,一是为了使文章体式更加规范化,二是出于对自己知识产权的保护。而对于编辑工作的新手而言,常常需要借鉴一下文章的素材就需要提取其中的...
  • word文档批量调整页码-wordAID

    千次阅读 2020-03-29 13:50:39
    编写文案或论文时,经常会用到多个word文档,最后统一打印。调整页码的工作枯燥,经常重复性操作,困扰了大部分搞科研写论文的老师、同学,因此wordAID应运而生。 下载地址: ...提取码:v993 直接下载地...
  • 项目文档编写规范与代码规范

    千次阅读 2010-10-15 12:03:00
     当然,如果刚刚创业起步的小公司如能更早的抓住项目规范、文档规范,更是使公司发展或者比大公司更大的推动力。  做文档应当十分注意细节问题,可以文档的细节规范决定文档的成败,正所谓细节决定成败...
  • Markdown技术文档编写规范

    千次阅读 2020-06-28 17:23:35
    Markdown技术文档编写规范 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式文档体系 结构 简介(Introduction): [必备] [文件] 提供对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,090
精华内容 17,636
关键字:

word文档报告规范格式