python-win32操作excel的一些特殊功能

摘要:
1、 openpyxlimportload_workbookimportwin32com中的特殊代码操作包括(隐藏列、解锁工作表保护、插入注释、创建文本框、附加和修改单元格内容)。客户端#隐藏列defhidden_列(路径,列,sheet_name=0):“”:parampath:文件路径:paramcolumn:列名,例如A、B、C,可以传入单个或间隔[B、E

一、代码

特殊操作包括(隐藏列,解锁工作表保护,插入批注,创建文本框,追加修改单元格内容)

from openpyxl import load_workbook
import win32com.client

# 隐藏列
def hidden_column(path, column, sheet_name=0):
    '''
    :param path: 文件路径
    :param column: 列名,如A,B,C,可以传入单个,可以是区间[B,E]
    :return:
    '''
    try:
        wb = load_workbook(path, data_only=True)
        if isinstance(sheet_name, str):
            ws = wb.get_sheet_by_name(sheet_name)
        else:
            ws = wb.worksheets[sheet_name]
        if isinstance(column, list):
            ws.column_dimensions.group(column[0], column[1], hidden=True)
        else:
            ws.column_dimensions[column].hidden = True
        wb.save(path)
    except Exception as e:
        print("打开文件失败:%s" % e)

# 解锁工作表保护
def unlock_excel(path, password, sheet_name="Sheet1"):
    '''
    :param path: 文件路径
    :param password:工作表保护密码
    :param sheetname: sheet名
    :return:
    '''
    xlApp = win32com.client.DispatchEx("Excel.Application")
    try:
        # 后台运行, 不显示, 不警告
        xlApp.Visible = False
        xlApp.DisplayAlerts = False
        wb = xlApp.Workbooks.Open(path)
        # 屏蔽弹窗
        wb.Checkcompatibility = False
        sht = wb.Worksheets(sheet_name)
        sht.Unprotect(password)
        wb.Save()
        wb.Close(SaveChanges=True)
    except Exception as e:
        xlApp.Quit()
        print("打开文件失败:%s" % e)

# 插入批注
def insert_notes(path, cell, content, sheet_name="Sheet1"):
    '''
    :param path: 文件路径
    :param cell: 批注单元格:如B4
    :param content: 批注内容
    :param notes_name: 批注人名
    :param sheet_name: sheet名
    :return:
    '''
    xlApp = win32com.client.DispatchEx("Excel.Application")
    try:
        # 后台运行, 不显示, 不警告
        xlApp.Visible = False
        xlApp.DisplayAlerts = False
        wb = xlApp.Workbooks.Open(path)
        sht = wb.Worksheets(sheet_name)
        if not sht.Range(cell).Comment:
            sht.Range(cell).AddComment()
        sht.Range(cell).Comment.Text(content)
        wb.Save()
        wb.Close()
    except Exception as e:
        xlApp.Quit()
        print("打开文件失败:%s" % e)

# 创建文本框
def create_text_box(path, left,top,Width,Height,content, sheet_name="Sheet1"):
    xlApp = win32com.client.DispatchEx("Excel.Application")
    try:
        # 后台运行, 不显示, 不警告
        xlApp.Visible = False
        xlApp.DisplayAlerts = False
        wb = xlApp.Workbooks.Open(path)
        sht = wb.Worksheets(sheet_name)
        # 分别是文字方向,文本框的左上角相对于文档左上角的位置,
        # 相对于文档顶部的文本框左上角的位置,文本框的宽度,文本框的高度(以磅为单位)
        # 磅的大小为 1/72 英寸。 字号通常用磅衡量
        sht.Shapes.AddTextbox(1, left,top,Width,Height).TextFrame.Characters().Text=content
        wb.Save()
        wb.Close()
    except Exception as e:
        xlApp.Quit()
        print("打开文件失败:%s" % e)


# 读取单元格,并修改单元格
def add_content_cell(path,cell,add_content,sheet_name="Sheet1"):
    xlApp = win32com.client.DispatchEx("Excel.Application")
    try:
        # 后台运行, 不显示, 不警告
        xlApp.Visible = False
        xlApp.DisplayAlerts = False
        wb = xlApp.Workbooks.Open(path)
        sht = wb.Worksheets(sheet_name)
        value=sht.Range(cell).Value
        sht.Range(cell).Value=value.strip("
")+"
"+add_content
        wb.Save()
        wb.Close()
    except Exception as e:
        xlApp.Quit()
        print("打开文件失败:%s" % e)

二、对win32进行了open,close封装

class Win32_excel(object):
    def __init__(self, path, sheet_name="Sheet1"):
        self.xlApp = win32com.client.DispatchEx("Excel.Application")
        self.path = path
        self.sheet_name = sheet_name

    def __enter__(self):
        try:
            # 后台运行, 不显示, 不警告
            self.xlApp.Visible = False
            self.xlApp.DisplayAlerts = False
            self.wb = self.xlApp.Workbooks.Open(self.path)
            # 屏蔽弹窗
            self.wb.Checkcompatibility = False
            self.sht = self.wb.Worksheets(self.sheet_name)
            return self
        except Exception as e:
self.xlApp.Quit()
print("打开文件失败:%s" % e) def __exit__(self, exc_type, exc_val, exc_tb): self.wb.Save() self.wb.Close(SaveChanges=True) self.xlApp.Quit() # 解锁工作表保护 def unlock_excel(self, password): self.sht.Unprotect(password) # 插入批注 def insert_notes(self, cell, content): if not self.sht.Range(cell).Comment: self.sht.Range(cell).AddComment() self.sht.Range(cell).Comment.Text(content) # 创建文本框 def create_text_box(self, left, top, Width, Height, content): # 分别是文字方向,文本框的左上角相对于文档左上角的位置, # 相对于文档顶部的文本框左上角的位置,文本框的宽度,文本框的高度(以磅为单位) # 磅的大小为 1/72 英寸。 字号通常用磅衡量 self.sht.Shapes.AddTextbox(1, left, top, Width, Height).TextFrame.Characters().Text = content # 读取单元格,并修改单元格 def add_content_cell(self, cell, add_content): value = self.sht.Range(cell).Value self.sht.Range(cell).Value = value.strip(" ") + " " + add_content # 复制单元格 def copy_cells(self, copy_cells, to_cells): # copy_cells,如:"A1:B1" # to_cells,如:"A2:B2" self.sht.Range(copy_cells).Copy() self.sht.Range(to_cells).PasteSpecial() # 插入单元格 def insert_cells(self,cells): # cells,如:"A1:E1" self.sht.Range(cells).Insert() # 插入行 def insert_row(self,row): # 在第几行之前插入新行 self.sht.Rows(row).Insert() # 单元格写入 def write(self,cell,content): self.sht.Range(cell).Value=content if __name__ == '__main__': path=r"日报.xlsx" df=pd.read_excel(path,sheet_name="sheet名") row=df.shape[0] print(row) with Win32_excel(path,sheet_name="sheet名") as w32: w32.insert_row(row+1) w32.copy_cells("A%s:G%s"%(row,row),"A%s:G%s"%(row+1,row+1))

免责声明:文章转载自《python-win32操作excel的一些特殊功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unity输入法相关(IME)使用nvm管理node不同版本,安装,环境配置,切换不同版本的node版本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

poi的各种单元格样式以及一些常用的配置

之前我做过一个poi到处excel数据的博客,但是,后面使用起来发现,导出的数据单元格样式都不对。 很多没有居中对齐,很多单元格的格式不对,还有就是单元格的大小不对,导致数据显示异常,虽然功能可以使用但不是很完美。 这里找到网上一个比较全面的简单设置。这么做一个记录,之后就是参考这个单元格的样式配置自己需要的格式。 官方给出的api太难了,还是看中文的吧。...

java使用freemarker模板导出word(带有合并单元格)文档

来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并单元格的,可是查了好久都没有自己想要的。研究了几天其实挺简单的,在这儿我就简单的介绍一下吧!(此方法只是一种思路,借鉴者还有根据需求来具体写代码) 一、准备...

使用POI创建word表格合并单元格兼容wps

poi创建word表格合并单元格代码如下: /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cell...

用POI读取具有任意合并单元的excel数据

import java.io.File; import java.io.IOException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apach...

PyQt5单元格操作大全

1、显示二维列表数据(QTableView)控件 '''显示二维列表数据(QTableView)控件数据源model需要创建一个QTableView实例和一个数据源model,然后将其两者关联MVC模式 model viewer controller 前后端关联MVC的目的是将后端的数据和前端页面的耦合度降低'''from PyQt5.QtWidgets...

jqgrid 行内修改单元格内容

由于字段较多,但可供用户修改的 字段仅有一个,所有不想通过弹出对话框的方式让用户进行修改。还好jqgrid支持行内数据修改,首先要将cellEdit设为true以支持对单元格的 修改操作。这里讲cellsubmit设为clientArray,当修改完成后并不直接发送到服务器进行保存,而是先保存在table中,当用户点击保 存按钮是才向数据库发送请求更新数据...