gpt4 book ai didi

python - 通过使用 Python 修改 Excel 后面的 xml 来动态更改 Excel 中的文件共享根目录

转载 作者:行者123 更新时间:2023-12-04 22:16:11 26 4
gpt4 key购买 nike

我们正处于文件共享迁移的阶段,但当前共享上的许多 excel 文件相互引用,包括根(在公式中)。
我认为可以通过修改底层 xml 将当前根的公式引用更改为新根。
我确实修改了 XML 的一个标记值,希望 XML 的结构保持不变。然而不幸的是,结构并没有保持不变。
标签:<x15ac:absPath xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac" url="Q:\General\Results\2021\"应修改为<x15ac:absPath xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac" url="I:\Results\2021\"如您所见,结构和标签发生了变化,我想不出原因。
感谢您对解决此问题的帮助。如果我需要澄清,请告诉我。
我的python代码:

import xml.etree.ElementTree as ET

# Change workbook.xml
tree = ET.parse('workbook.xml')
root = tree.getroot()
for elem in root.iter():
if str(elem.get('url'))[:11] == 'Q:\General':
elem.set('url', elem.get('url').replace(r'Q:\General', 'I:\Results'))
tree.write('workbook.xml', encoding='UTF-8', method='xml', xml_declaration=True)
初始 Excel 文件 (workbook.xml) 的 XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15 xr xr6 xr10 xr2"
xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"
xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision"
xmlns:xr6="http://schemas.microsoft.com/office/spreadsheetml/2016/revision6"
xmlns:xr10="http://schemas.microsoft.com/office/spreadsheetml/2016/revision10"
xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2">
<fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="23426"/>
<workbookPr defaultThemeVersion="166925"/>
<mc:AlternateContent
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<mc:Choice Requires="x15">
<x15ac:absPath url="Q:\General\Results\2021\"
xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac"/>
</mc:Choice>
</mc:AlternateContent>
<xr:revisionPtr revIDLastSave="0" documentId="13_ncr:1_{77E8B687-2130-4B59-8784-F53BD3BD2847}" xr6:coauthVersionLast="45" xr6:coauthVersionMax="45" xr10:uidLastSave="{00000000-0000-0000-0000-000000000000}"/>
<bookViews>
<workbookView xWindow="28680" yWindow="-120" windowWidth="29040" windowHeight="15990" xr2:uid="{00000000-000D-0000-FFFF-FFFF00000000}"/>
</bookViews>
<sheets>
<sheet name="Blad1" sheetId="1" r:id="rId1"/>
</sheets>
<calcPr calcId="191029"/>
<extLst>
<ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}"
xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main">
<x15:workbookPr chartTrackingRefBase="1"/>
</ext>
<ext uri="{B58B0392-4F1F-4190-BB64-5DF3571DCE5F}"
xmlns:xcalcf="http://schemas.microsoft.com/office/spreadsheetml/2018/calcfeatures">
<xcalcf:calcFeatures>
<xcalcf:feature name="microsoft.com:RD"/>
<xcalcf:feature name="microsoft.com:Single"/>
<xcalcf:feature name="microsoft.com:FV"/>
<xcalcf:feature name="microsoft.com:CNMTM"/>
<xcalcf:feature name="microsoft.com:LET_WF"/>
</xcalcf:calcFeatures>
</ext>
</extLst>
</workbook>
在 python 代码之后输出 XML:
<?xml version='1.0' encoding='UTF-8'?>
<ns0:workbook
xmlns:ns0="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:ns1="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ns2="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac"
xmlns:ns3="http://schemas.microsoft.com/office/spreadsheetml/2014/revision"
xmlns:ns4="http://schemas.microsoft.com/office/spreadsheetml/2016/revision6"
xmlns:ns5="http://schemas.microsoft.com/office/spreadsheetml/2016/revision10"
xmlns:ns6="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2"
xmlns:ns7="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:ns8="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"
xmlns:ns9="http://schemas.microsoft.com/office/spreadsheetml/2018/calcfeatures" ns1:Ignorable="x15 xr xr6 xr10 xr2">
<ns0:fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="23426" />
<ns0:workbookPr defaultThemeVersion="166925" />
<ns1:AlternateContent>
<ns1:Choice Requires="x15">
<ns2:absPath url="I:\Results\2021\" />
</ns1:Choice>
</ns1:AlternateContent>
<ns3:revisionPtr revIDLastSave="0" documentId="13_ncr:1_{77E8B687-2130-4B59-8784-F53BD3BD2847}" ns4:coauthVersionLast="45" ns4:coauthVersionMax="45" ns5:uidLastSave="{00000000-0000-0000-0000-000000000000}" />
<ns0:bookViews>
<ns0:workbookView xWindow="28680" yWindow="-120" windowWidth="29040" windowHeight="15990" ns6:uid="{00000000-000D-0000-FFFF-FFFF00000000}" />
</ns0:bookViews>
<ns0:sheets>
<ns0:sheet name="Blad1" sheetId="1" ns7:id="rId1" />
</ns0:sheets>
<ns0:calcPr calcId="191029" />
<ns0:extLst>
<ns0:ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}">
<ns8:workbookPr chartTrackingRefBase="1" />
</ns0:ext>
<ns0:ext uri="{B58B0392-4F1F-4190-BB64-5DF3571DCE5F}">
<ns9:calcFeatures>
<ns9:feature name="microsoft.com:RD" />
<ns9:feature name="microsoft.com:Single" />
<ns9:feature name="microsoft.com:FV" />
<ns9:feature name="microsoft.com:CNMTM" />
<ns9:feature name="microsoft.com:LET_WF" />
</ns9:calcFeatures>
</ns0:ext>
</ns0:extLst>
</ns0:workbook>

最佳答案

对于这样一个简单的更改,我不会为 XML 解析器的开销而烦恼。
此示例中的代码有效并且不会以意想不到的方式修改您的 XML 文件。
首先,以读取模式打开文件,创建一个字符串变量来保存修改后的输出,然后关闭只读文件句柄。

workbook = open('workbook.xml', 'r')
fix_workbook = workbook.read()
fix_workbook = fix_workbook.replace("<x15ac:absPath url=\"Q:\\General\\Results\\2021\\", "<x15ac:absPath url=\"I:\\Results\\2021\\")
workbook.close()
以写入模式重新打开文件,保存更改,然后关闭文件句柄。
workbook = open('workbook.xml', 'w')
workbook.write(fix_workbook)
workbook.close()
而已!
额外的功劳:为工作选择正确的工具可能很棘手。 Python 在很多方面都很棒,但是工具箱中有更强大的工具可以完成这个简单的任务。这是 ways to replace strings in text files 的完整列表使用 Stack Exchange 上的 UNIX 命令行工具。

关于python - 通过使用 Python 修改 Excel 后面的 xml 来动态更改 Excel 中的文件共享根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68863655/

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