Python自動化辦公之Word批量轉成自定義格式的Excel

2021-02-25 小張Python

作者:青春陽光king

https://blog.csdn.net/Jacky_kplin/article/details/104367844

python實現word轉成自定義格式的excel文檔(解決思路和代碼)支持按照文件夾去批量處理,也可以單獨一個文件進行處理,並且可以自定義標識符。

最近在開發一個答題類的小程序,到了錄入試題進行測試的時候了,發現一個問題,試題都是word文檔格式的,每份有100題左右,拿到的第一份試題,光是段落數目就有800個。而且可能有幾十份這樣的試題。

而word文檔是沒有固定格式的,想批量錄入關係型資料庫mysql,必須先轉成excel文檔。這個如果是手動一個個粘貼到excel表格,那就頭大了。

我最終需要的excel文檔結構是這樣的:每道題獨立佔1行,每1列是這道題的一項內容,大概就是問題、選項A、選項B等等。

img

但word文檔是這種結構,如果按照網上通用的方式去轉,基本上你得到的結果就是一大坨文字都在一格裡,根本不符合需求。

img

最後我想到了一個解決思路,可以實現這個需求,先看看我轉出來的結果:

imgimg

這個格式雖然跟最終的有點差別,但是只要在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文檔的結構類似這樣:

img

2、讀取到的數據如何處理?

使用pandas讀取到的數據是一個dataFrame,dataFrame的結構就類似於我們在excel文檔裡面那樣行列分明的。但是,它從txt讀取出來的格式是全部內容都視為1列的,而txt中的每一段,在它這裡就是每一行(注意是每一段對應一行,而不是每一行對應每一行)

預覽一下:結果顯示800行,1列。也就是在txt文檔中有800個段落。

img

3、接下來怎麼處理呢?

pandas強大的地方就在這裡了,它可以直接把這1列的內容全部轉成Series,Series是什麼你可以不用管,你只需要知道Series可以直接轉成列表list就行了。有了list我們就方便操作了。

以上幾步就實現了從word裡面讀取數據,並轉化成python的數據類型list了。list裡面的每個元素,就等同於我們word裡面的每一個段落。

控制臺列印出來的就是這樣:

下面的800是計算出這個列表的長度,代表有800個元素。

img

接下來我們的需求就變成了:怎麼把一個列表,轉成有明確行列結構的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:

img

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在控制臺列印出來就是:

img

這個結構存入excel就是對應表格的行和列了。這個結構就符合我的實際需求了。

img

所以我們要構造出這個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",處理後像下面這樣:

img

接著要看你的文檔內容是否有題號,如果有的話:比如像我這個,有具體的題號1-100題,並且它的寫法都是「1.」,在題號後面跟了個英文字符「.」,順序遞增到100。

img

那麼你就可以調用file_handle_by_range。你給它傳第一個參數是個具體的文件路徑,它就會去打開這個文件,讀取裡面的內容。

傳的第二個參數是100,它就會自動生成1到100的字符串,用來匹配識別你的每道題的開頭在哪個位置。(如果你最大的題號是200,就寫200,可以寫多,但不能寫少,少了識別到的內容會缺失)

傳的第三個參數是「.」,它就會按照「.」去切割每一行的內容,拿到第一個「.」號前面的內容,用來跟它生成的匹配字符做比對,比對成功了,它就默認該行是你想要寫到excel表格裡的第一列,接在它後面的每個段落,會自動插入到它後面的列。

直到匹配到下一個「數字.」開頭的,又重複這個過程。

如果你的文檔裡面並不是像我這樣,沒有順序遞增的題號,你可以手動給每個你想要放在表格中第一列的段落,在它前面加標識符,例如「####.」,注意最後是有個小點的。像下面這樣:

img

接著調用

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, '#', '.')

相關焦點

  • Python辦公自動化| word 表格轉excel
    之前寫過一篇 Python辦公自動化 | 批量word報告生成工具 ,有小夥伴提出了逆向需求,即:從批量word中獲取內容並寫入excel,需求背景是匯總一些材料,舉例:實習鑑定表、個人簡歷、檔案等。實際需求是這樣的,現在有如下格式的若干word文檔,需要錄入標黃信息到excel,手工錄入效率太低了,能不能用python實現呢?
  • 講一講我是如何通過Python實現辦公自動化的
    自動化辦公無非是excel、ppt、word、郵件、文件處理、數據分析處理、爬蟲這些,今天我們主要來講講excel、ppt、word自動化的操作技巧。我們需要學習的主要內容有:python基礎;excel自動化;ppt自動化;word自動化。
  • 從PPT到Word,用Python輕鬆實現辦公自動化
    來源  | 早起Python(ID:zaoqi-python)在之前的自動化系列文章中,我們分別講過如何使用 Python 將 Word 中表格信息批量提取至
  • Python自動化用這些知識點就夠了!
    這可能是很多非IT職場人士面臨的困惑,想把python用到工作中,卻不知如何下手?python在自動化辦公領域越來越受歡迎,批量處理簡直是加班族的福音。自動化辦公無非是excel、ppt、word、郵件、文件處理、數據分析處理、爬蟲這些,這次就來理一理python自動化辦公的那些知識點。下面一一詳解。
  • Python自動化辦公(內容)
    python自動化辦公(python操作Excel、Word、PDF、PPT)python使用openpyxl操作excel;python使用PyPDF2和pdfplumber操作pdf;python使用python-docx操作word;python使用python-pptx操作PPT;python如何自動收發郵件;python製作電話號碼歸屬地查詢工具;一:python
  • excel怎麼轉換成word格式的文件格式?這些方法應該掌握!
    但是直接將excel表格複製到word文檔,完全行不通,亂碼現象都沒眼看。但我們也不能否定「複製」這一方法,因為用對了「複製」,我們也可以實現直接將excel轉word。Excel怎麼轉換成word格式的文件格式?想要了解具體步驟的小夥伴請繼續往下查看本篇文章。
  • Python辦公自動化|從Excel到Word
    除了對按照格式進行處理並存入Word中指定位置之外,還有一個需求:最終輸出的word文件名還需要按照一定規則生成:文件名title = f'{order_num_title}-{supplier}-{total_num}-{info_title}-{time}-驗貨報告'print(title)通過上面的代碼,我們就成功的從Excel中提取出來數據,這樣Excel部分就結束了,接下來進行word的填表啦,由於這裡我們默認讀取的word是.docx格式的,實際上讀者的需求是.doc格式文件
  • excel表格轉成word文本為什麼格式不對?
    excel表格轉成word文本為什麼格式不對?昨天部門的小青在和我吃飯時,吐槽了這個問題。說直屬上級吩咐她把幾份《項目完成情況》的excel表格轉為word版本,但她轉換了幾次,發現都會存在格式錯亂的問題,她更換了好幾款轉換工具,依然沒有完成任務。
  • word轉excel方法,Word怎麼轉成Excel
    奇點來臨小編了解到的情況,如果提到辦公軟體的使用,不得不提到兩個軟體,一個是word,一個就是excel。最近有朋友在後臺給小編留言如何把word轉化excel,今天小編就和大家聊聊這個問題。word轉excel方法word作為一個文本處理軟體,表格編輯能力沒有excel強大,這是必然的。很多時候,當我們用word做好表格之後,我們會發現,很多表格功能卻無法使用,比如分類匯總,比如篩選等。這個時候,我們就需要把word轉化成excel來進行處理。
  • python自動化辦公手冊之python操作PPT
    前言1)python自動化文檔手冊python自動化文章一直深受廣大python愛好者的青睞。基於此,我花了整整一周時間真理出來的python自動化文檔手冊,涉及到五個章節(如下圖所示),① python使用openpyxl操作excel;② python使用PyPDF2和pdfplumber操作pdf;③ python使用python-docx操作word;④ python使用python-pptx操作PPT;⑤ python如何自動收發郵件;⑥ python製作電話號碼歸屬地查詢工具。
  • Python辦公自動化 | 批量word報告生成工具
    有時候我們需要按照某種規則生成一種固定模板的word報告,python能夠很好的完成這項工作。
  • 數據分析:基於Python的自定義文件格式轉換系統
    你打開一看文件格式繁雜,諸如pdf、doc、docx、txt、excel等。更悲催的是有些pdf文件還是加密的,或者是圖片格式的等複雜情況。此刻你採用什麼方法做數據分析與預處理工作呢?上面情況算你幸運,隔幾天技術主管直接給你一堆網站,讓你自己去採集信息。你或許會驚喜的說的,那不簡單,使用爬蟲技術不就可以啦?
  • word轉excel有什麼好用的方法?具體word轉excel操作分享
    word轉excel有什麼好用的方法?當我們在word中匯總了一些數據時,想要將其內容轉換到excel表格中,一般大家都是怎麼操作呢?如果大家不會對這兩種文件進行轉換的話,可以嘗試一下小編以下的方法,這樣我們就可以很快的完成word到excel表格的轉換了。
  • excel轉換成word格式是怎麼實現的?excel轉換word格式圖文教程
    excel轉換成word格式圖文教程:我是一名cad設計師,在公司主要負責家居、家具設計。平時,除了設計家居、家具,很多時候還需要整理、匯總設計數據到excel格式表格。有些時候,我也會用word文檔代替excel表格,文件內容的表現形式會很不同。例如,我們可以把表格中內容都弄到一頁a3或a4尺寸word文檔中,一目了然。不過,如果平時很少進行excel表格與word文檔之間格式轉換的話,一下子確實有點不知從何下手。迅捷PDF轉換器是我平時較常使用的軟體之一,常用它進行pdf文件與其他文件之間的格式互轉。
  • Word表格轉成Excel, 格式都變了怎麼辦
    雖然在表格處理方面,word遠遠不及Excel/wps表格,可工作中還是有很多表格存放在Word中。於是,我們會將一些word中的表格轉換成excel表格。可效果很差,轉換後格式出現各種錯亂。Word表格轉成Excel方法一如果你的word表格數據較少,數據類型比較單一,單元格合併比較少,建議直接從word中複製粘貼到Excel中。
  • excel怎麼轉換成word格式手機?骨灰級方法確定不收藏嗎?
    Excel怎麼轉換成word格式手機?想要直接在手機上完成excel轉word並不困難,那既然不困難,那麼,excel怎麼轉換成word格式手機?想要了解具體步驟,請看以下操作步驟。操作步驟:1.Excel怎麼轉換成word格式手機?
  • python自動化辦公:玩轉word之樣式秘笈
    上節對python如何定製word的頁眉頁腳做了詳細介紹,當然,要作出一篇精彩的word文檔,樣式公布可沒,本章繼續介紹python如何玩轉word的樣式。使用樣式python如何玩轉word的樣式此頁面使用前一頁中開發的概念而不作介紹。如果術語不熟悉,請參閱word的樣式參考。
  • 【Python基礎】python使用python-docx操作word
    paragraph1 = doc.add_paragraph("這是一個段落")paragraph2 = doc.add_paragraph("這是第二個段落")doc.save(r"G:\6Tipdm\7python辦公自動化\concat_word\test1.docx") """添加段落的時候,賦值給一個變量,方便我們後面進行格式調整;"""
  • 聊聊python 辦公自動化之 Word(中)
    作者:星安果 來源:AirPython(公眾號)上一篇文章,對 Word 寫入數據的一些常見操作進行了總結,詳情請看聊聊python 辦公自動化之 Word(上)。相比寫入數據,讀取數據同樣很實用!本篇文章,將談談如何全面讀取一個 Word 文檔中的數據,並會指出一些要注意的點。
  • PDF文檔怎麼轉換成excel格式?教你兩個把PDF轉excel的方法
    PDF文檔格式不容易修改,因此很多人在預覽或傳遞excel文檔時會將其轉換成PDF格式。這樣下來傳遞和預覽是方便了,但是接收方卻要開始犯難了,想要編輯文件但卻又無從下手。那這時該怎麼去處理,放任不管嗎?