【问题标题】:interpreting xml produced by microsoft office word and excel documents解释microsoft office word和excel文档生成的xml
【发布时间】:2014-03-20 08:31:36
【问题描述】:

我希望建立一个免费的系统来提取文本、文本格式(例如粗体等)和图像内容,例如 Excel 和 Word。

在我的研究中,我发现使用 7zip 之类的压缩实用程序提取文档后,excel (xlsx) 和 word (docx) 文档的结构是在 xml 中定义的。

我精通 VBA,但我无法找到对象模型(列出所有可应用于/操作的对象和方法:

  1. Excel VBA
  2. Word VBA
  3. Word XML
  4. Excel XML

我已经知道许多 excel vba 对象,但这只是通过反复试验和实验,而不是通过读取定义方法/对象的对象模型!

问题

  • 我不知道如何解释 XML,因为我没有显示 表示粗体等的对象模型

我正在尝试开发一种工具,它可以通过 xml 查找:

  1. 文档中任何图像的位置,包括相对目录(在 Directory / Word / Media 文件夹中)和实际文件路径,例如C:\documents\josh\img1.png
  2. 文档中任何文本的位置(我考虑的是行,从上到下阅读文档,以及中心等对齐方式)所以我可以以正确的顺序复制文本。李>
  3. 应用于文本的格式(粗体、某种字体、某种大小?

请帮我找到一个对象模型或某种方式来解释或解析这个

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"><w:body><w:p w:rsidR="001920B6" w:rsidRDefault="001920B6" w:rsidP="001920B6"><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/><w:r><w:rPr><w:noProof/></w:rPr><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251658240" behindDoc="1" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="4B104522" wp14:editId="4A3907E9"><wp:simplePos x="0" y="0"/><wp:positionH relativeFrom="column"><wp:posOffset>0</wp:posOffset></wp:positionH><wp:positionV relativeFrom="paragraph"><wp:posOffset>1209675</wp:posOffset></wp:positionV><wp:extent cx="5943600" cy="3343275"/><wp:effectExtent l="0" t="0" r="0" b="9525"/><wp:wrapTight wrapText="bothSides"><wp:wrapPolygon edited="0"><wp:start x="0" y="0"/><wp:lineTo x="0" y="21538"/><wp:lineTo x="21531" y="21538"/><wp:lineTo x="21531" y="0"/><wp:lineTo x="0" y="0"/></wp:wrapPolygon></wp:wrapTight><wp:docPr id="1" name="Picture 1"/><wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/></wp:cNvGraphicFramePr><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="windows.png"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="rId7" cstate="print"><a:extLst><a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}"><a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"/></a:ext></a:extLst></a:blip><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="5943600" cy="3343275"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="page"><wp14:pctWidth>0</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="page"><wp14:pctHeight>0</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></w:r><w:r w:rsidR="00327DB9"><w:rPr><w:noProof/></w:rPr><w:t>Plain text</w:t></w:r></w:p><w:p w:rsidR="00327DB9" w:rsidRDefault="00327DB9" w:rsidP="001920B6"><w:pPr><w:rPr><w:b/></w:rPr></w:pPr><w:r><w:rPr><w:b/></w:rPr><w:t>bold</w:t></w:r><w:r w:rsidR="0009704D" w:rsidRPr="00327DB9"><w:rPr><w:b/></w:rPr><w:t xml:space="preserve"> text</w:t></w:r></w:p><w:p w:rsidR="00327DB9" w:rsidRPr="00327DB9" w:rsidRDefault="00327DB9" w:rsidP="00327DB9"><w:pPr><w:pStyle w:val="Heading1"/></w:pPr><w:r><w:t>heading</w:t></w:r></w:p><w:p w:rsidR="00327DB9" w:rsidRPr="001920B6" w:rsidRDefault="00327DB9"/><w:sectPr w:rsidR="00327DB9" w:rsidRPr="001920B6"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>

关于 xml 的问题

  1. 确定图像(位于底部)相对于文本(位于其上方)的位置
  2. 有多少张图片?是不是因为图片的 ID 或 INDEX 为 0?

【问题讨论】:

  • 请添加更多关于提取的数据将用于什么的信息。 (我的直觉是使用除 VBA 之外的任何东西,但您仍然可能有一些充分的理由)
  • 数据(里面的文本和图像)可以用于任何事情,例如保存到网络,仅提取数据(也许我不需要所有格式)
  • @–przemo_li 你知道VBA对象模型在哪里吗?
  • 在 VBA 中?您可以打开用户可以选择的任何 Excel 文件。然后:ThisWorkbook.VBAProject。 ...但请注意,需要在参考中设置可扩展性库,并在宏安全设置中设置权限。并且 AV 软件仍然可以阻止此类行为 :D 无论如何。我不认为 VBA 是通用 OOXML 切片和修补的正确工具。
  • @– przemo_li,是的,我用 VBA 编码,所以我知道如何通过工具菜单进入编辑器并设置引用。我在网上找不到的是对象模型。例如它可能会说>> Object: Workbook Method: Add Sheet,基本上我找不到这些方法和对象都列在一个地方的任何地方?

标签: xml excel vba ms-word


【解决方案1】:

看看 Office Open XML,这是所有 MS-Office 文档的 xml 结构: http://openxmldeveloper.org/。 有一本很好的电子书解释了基础知识:http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2007/08/13/1970.aspx

但请注意:解析或解释 Office Open XML 是一项极其艰巨的任务,尤其是在不适合这项工作的 VBA 中。 C#/VB.net中有很多库可以读取office open xml文档,这将是一个更好的起点。

【讨论】:

  • 有没有比python更快的?
  • Python 比 C# 快?也许开发机器人不是原始代码速度(我在两者中都编程......)至于python lib:google:python office openxml
  • 电子书在哪里?我找不到它:(
  • 是否可以使用 zip 文件夹结构来提取不同模块中的 VBA 代码?
  • 是的,我想是的。 EPPLus 有这个能力——你可以看看他们的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2011-02-14
  • 2010-09-15
  • 2016-03-24
相关资源
最近更新 更多