欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python調(diào)用VBA實(shí)現(xiàn)保留原始樣式的表格合并方法

 更新時(shí)間:2023年01月29日 15:44:33   作者:小小明-代碼實(shí)體  
本文主要介紹了Python調(diào)用VBA實(shí)現(xiàn)保留原始樣式的表格合并方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

之前我在《各類Excel表格批量合并問題的實(shí)現(xiàn)思路與案例》一文中演示了各種常見的表格合并的需求,但VBA復(fù)制粘貼的需求卻沒有演示,今天我演示一個(gè)基于VBA復(fù)制粘貼來(lái)實(shí)現(xiàn)表格合并的案例。

有一個(gè)Excel表有很多sheet:

image-20220424192931760

現(xiàn)在我們需要在保留所有樣式的情況下,將所有sheet合并到一個(gè)sheet中。我的實(shí)現(xiàn)思路如下:

  • 創(chuàng)建一個(gè)新的sheet,將第一個(gè)sheet完整合并進(jìn)去
  • 將后面的sheet除了表頭外都復(fù)制粘貼到新建的sheet中(排除掉不需要參與合并的sheet)

上面的操作人工進(jìn)行操作會(huì)非常容易理解,下面我們看看如何用代碼實(shí)現(xiàn)呢?

首先我們打開目標(biāo)文件:

import win32com.client as win32  # 導(dǎo)入模塊
import os

excel_app = win32.gencache.EnsureDispatch('Excel.Application')
# 可以看到打開的Excel軟件
excel_app.Visible = True
# vba只支持傳入絕對(duì)路徑
filename = os.path.abspath("車輛運(yùn)營(yíng)日?qǐng)?bào)表2月份.xlsx")
wb = excel_app.Workbooks.Open(filename)

可以查看一個(gè)全部的sheet名稱:

sheet_names = [sh.Name for sh in wb.Sheets]
print(sheet_names)

['2月6日', '2月8日', '2月9日', '2月10日', '2月11日', '2月12日', '2月14日', '2月15日', '2月16日', '無(wú)', '2月17日', '2月18日', '2月19日', '2月20日', '2月21日', '2月22日', '2月23日', '2月24日', '2月25日', '2月26日', '2月27日', '2月28日']

然后開始進(jìn)行批量合并:

start_num, dest_name = 5, "2月合并"

dest = wb.Sheets.Add(After=wb.Sheets(wb.Sheets.Count))
dest.Name = dest_name
pos = start_num
for i, sheet in enumerate(wb.Sheets):
    if sheet.Name in ("無(wú)", dest_name):
        continue
    print(sheet.Name)
    max_rows = sheet.Range("A65535").End(-4162).Row
    max_cols = sheet.UsedRange.Columns.Count
    print(max_rows, max_cols)
    sheet.Activate()
    n = 1 if i == 0 else start_num
    rng = sheet.Range(sheet.Cells(n, 1), sheet.Cells(max_rows, max_cols))
    rng.Select()
    excel_app.Selection.Copy()
    dest.Activate()
    dest.Range(f"A{pos}").Activate()
    dest.Paste()
    pos += max_rows-n+1

可以看到已經(jīng)順利的實(shí)現(xiàn)了批量合并:

image-20220424201920584

然后我們只需要手工或者代碼修改一個(gè)日期即可:

dest.Range("M2").Value = dest.Range("M2").Value[:-2]

image-20220424202236053

最后就可以保存并退出了:

wb.SaveAs(os.path.abspath(f"{filename}_合并.xlsx"))
wb.Close()
excel_app.Quit()

最終完整代碼為:

import win32com.client as win32  # 導(dǎo)入模塊
import os

excel_app = win32.gencache.EnsureDispatch('Excel.Application')
# 可以看到打開的Excel軟件
excel_app.Visible = True
# vba只支持傳入絕對(duì)路徑
filename = "車輛運(yùn)營(yíng)日?qǐng)?bào)表2月份.xlsx"
wb = excel_app.Workbooks.Open(os.path.abspath(filename))

start_num, dest_name, filter_names = 5, "2月合并", ("無(wú)",)

excel_app.ScreenUpdating = False
dest = wb.Sheets.Add(After=wb.Sheets(wb.Sheets.Count))
dest.Name = dest_name
pos = 1
for i, sheet in enumerate(wb.Sheets):
    if sheet.Name in (dest_name, *filter_names):
        continue
    max_rows = sheet.Range("A65535").End(-4162).Row
    max_cols = sheet.UsedRange.Columns.Count
    print(sheet.Name, max_rows, max_cols)
    sheet.Activate()
    n = 1 if i == 0 else start_num
    rng = sheet.Range(sheet.Cells(n, 1), sheet.Cells(max_rows, max_cols))
    rng.Select()
    excel_app.Selection.Copy()
    dest.Activate()
    dest.Range(f"A{pos}").Activate()
    dest.Paste()
    pos += max_rows-n+1
# 自動(dòng)列寬調(diào)整
excel_app.Selection.EntireColumn.AutoFit()
# 修改日期
dest.Range("M2").Value = dest.Range("M2").Value[:-2]
excel_app.ScreenUpdating = True

# 保存并退出
wb.SaveAs(os.path.abspath(f"{filename}_合并.xlsx"))
wb.Close()
excel_app.Quit()

然后根據(jù)自己的實(shí)際需求修改上述代碼即可。

到此這篇關(guān)于Python調(diào)用VBA實(shí)現(xiàn)保留原始樣式的表格合并方法的文章就介紹到這了,更多相關(guān)Python調(diào)用VBA表格合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV圖像縮放resize各種插值方式的比較實(shí)現(xiàn)

    OpenCV圖像縮放resize各種插值方式的比較實(shí)現(xiàn)

    OpenCV提供了resize函數(shù)來(lái)改變圖像的大小,本文主要介紹了OpenCV圖像縮放resize各種插值方式的比較實(shí)現(xiàn),分享給大家,感興趣的可以了解一下
    2021-06-06
  • python3 中的幾種除法介紹,小數(shù)的不同顯示

    python3 中的幾種除法介紹,小數(shù)的不同顯示

    這篇文章主要介紹了python3 中的幾種除法介紹,小數(shù)的不同顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python有序容器的 sort 方法詳解

    Python有序容器的 sort 方法詳解

    這篇文章主要介紹了Python有序容器的 sort 方法,容器.sort(key=選擇排序依據(jù)的函數(shù), reverse=True|False) 可以將有序容器進(jìn)行排序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • matplotlib實(shí)現(xiàn)矩陣和圖像的可視化表示

    matplotlib實(shí)現(xiàn)矩陣和圖像的可視化表示

    這篇文章主要為大家詳細(xì)介紹了如何利用matplotlib實(shí)現(xiàn)矩陣和圖像的可視化表示,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2024-03-03
  • python主要用于哪些方向

    python主要用于哪些方向

    在本篇文章里小編給大家整理了一篇關(guān)于python用于的方向的相關(guān)文章,有需要的閱讀下吧。
    2020-07-07
  • Python中的if判斷語(yǔ)句中包含or問題

    Python中的if判斷語(yǔ)句中包含or問題

    這篇文章主要介紹了Python中的if判斷語(yǔ)句中包含or問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python urllib爬取百度云連接的實(shí)例代碼

    python urllib爬取百度云連接的實(shí)例代碼

    本篇文章主要介紹了python urllib爬取百度云連接的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 關(guān)于Numpy中的行向量和列向量詳解

    關(guān)于Numpy中的行向量和列向量詳解

    今天小編就為大家分享一篇關(guān)于Numpy中的行向量和列向量詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python自定義命令行參數(shù)選項(xiàng)和解析器

    Python自定義命令行參數(shù)選項(xiàng)和解析器

    這篇文章主要介紹了Python自定義命令行參數(shù)選項(xiàng)和解析器,本文主要使用的方法為argparse.ArgumentParser(),此模塊可以讓人輕松編寫用戶友好的命令行接口,程序定義它需要的參數(shù),需要的朋友可以參考下
    2023-07-07
  • Python類的繼承用法示例

    Python類的繼承用法示例

    這篇文章主要介紹了Python類的繼承用法,結(jié)合實(shí)例形式分析了Python類的定義、繼承等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評(píng)論