gpt4 book ai didi

python - 如何在不丢失宏的情况下使用 pandas、openpyxl、xlwings 使用宏更新现有的 xlsm 工作表

转载 作者:行者123 更新时间:2023-12-05 07:21:25 25 4
gpt4 key购买 nike

首先,我将从这篇文章中讨论我的需求......现在我需要从另一个 excel csv 文件更新现有的 excel xlsm 文件,因为这个 csv 文件是一个导出的 csv > 来自 outlook 邮件收件箱,这是我的 outlook 邮件 csv

的模板
|---------------------|------------------|------------------|------------|
| Subject | Body | From: (Name) | To: (Name) |
|---------------------|------------------|------------------|------------|
|blabla LCAIN5678 bla |bla bla bla bla |bla bla bla bla |bla bla bla |
|---------------------|------------------|------------------|------------|

当我在使用 pandas 阅读后使用 str.extract 处理和分析此 csv 文件时,这是我从中提取特定数据的提取代码csv 文件,至于像这样提取特定字符串 LCAIN5678 包含五个字符和五个数字,然后使用 dropna() with,

这段代码

# this object extract 5 chars and 5 numbers from specific column in csv
replaced_sbj_value = myOutlook_inBox['Subject']
.str.extract(pat='(L(?:DEL|CAI|SIN).\d{5})').dropna()

这是我的xlsm文件,由pandas读取

gov_tracker_sheet = pd.read_excel(r'' + mydi
sheet_name
header=1)

这是我的 csv 文件,由 pandas 读取

myOutlook_inBox = pd.read_csv(r'' + mydir + 'test.CSV
encoding='latin-1')

然后我这样初始化它

myOutlook_inBox["Subject"] = replaced_sbj_value
print (replaced_sbj_value)

变成这样

|-----------------|
| Subject |
|-----------------|
| LCAIN5678 |
|-----------------|

然后我使用一些函数创建条件,例如 loc str.contains

喜欢这个条件因为这个条件是过滤csv

中的一些文本
# Condition 1: any mail from mowafy to te
frm_mwfy_to_te = myOutlook_inBox.loc[myOutlook_inBox['From:
(Name)'].str.contains("mowafy", na=False) \
& myOutlook_inBox['To:
(Name)'].str.contains("te", na=False)] \
.drop_duplicates(keep=False)

然后我通过使用 join 方法创建一个变量来 join 变量 frm_mwfy_to_te 到 excel xlsm 文件我想更新

filtered_data_cond1 = gov_tracker_sheet.loc[
gov_tracker_sheet['SiteCode']
.str.contains('|'.join(frm_mwfy_to_te.Subject))]
print(filtered_data_cond1)

因为这只是让我从 xlsm excel 文件中获取我想要更新的行

所以最后在这里创建一个元组值以使用此变量更新 Dataframe这是我的 tuple 变量

values = tuple(filtered_data_cond1['Pending  '].values.tolist())

因为这是我的元组值的输出

(u'TE', u'PP', u'TE', u'TE', u'TE', u'TE', u'TE', u'TE', u'TE')

所以从这里开始,我通过使用 replace 方法开始使用 Regex

这是我创建的替换变量

updated_gov_tracker = gov_tracker_sheet.replace(to_replace=values,
value='xxxxxxxxxxxx',
regex=False)

此代码有效,但它只是替换了包含 TExlsm 文件中的所有行,我只需要更新所需的行

我用了另一种方式,有些人是这样想的,但效果不佳

updated_gov_tracker=re.sub(values,"xxxxxxxxx",gov_tracker_sheet)

我需要的第二件事我想用旧的 xlsm 表格替换我的新 Dataframe 而不会在 excel 中丢失我的 macros

已编辑

这是我想要更新的现有 excel 文件,看起来像

enter image description here

这是我的 csv Outlook 收件箱 excel 看起来像这样

enter image description here

现在搜索后我发现 xlwings 也可以帮助我,通过选择行的范围并写入新的 updatedvalue,所以我现在需要采取tuple 变量,因为此变量包含名为站点代码的列的 strings,最后我现在需要根据此元组中的值行更新 excel xlsm 第一张表

例子

我有一个像这样的元组值 LCAIN12345 LCAIN54632 LCAIN78965 啦啦啦啦

现在这个值已经存在于名为 Gov_Tracker 的工作表中名为 SiteCodexlsm 工作表中 我想根据 更新一些列>rows 这个值,就像我想在名为 PendingPending Status 和 blablabla

的列中更新一样

现在我想修改此列的行值,例如将 PendingPending Status、blablabla equals 中的旧值更改为新值TE,等待 TE 接受`blablabla

我希望这个信息足够清楚

最佳答案

使用 XlsxWriter 创建 xlsm 的最简单解决方案是手动更改文件结尾,然后在额外的步骤中包含宏(参见 here ):

import pandas as pd

df = pd.DataFrame({'First' : [5, 2, 0, 10, 4],
'Second' : [9, 8, 21, 3, 8]})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1')

workbook = writer.book
workbook.filename = 'test.xlsm'
workbook.add_vba_project('./vbaProject.bin')

writer.save()

查看此 answer .您可以使用 XslxWriter 包附带的 vba_extract.py 实用程序提取宏 (vbaProject.bin)。

$ vba_extract.py macro_file.xlsm
Extracted: vbaProject.bin

关于python - 如何在不丢失宏的情况下使用 pandas、openpyxl、xlwings 使用宏更新现有的 xlsm 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56931921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com