我有一位朋友在Microsoft Word 2007中撰写 400页的图书。
在整本书中,他有 200个故事,每个故事由多个段落组成。
当他完成这本书的编写后,他希望将其Word文档中嵌入的每个故事的文本复制到数据库表中,例如:
Title, varchar(200)
Description, text
Content, text
我们不希望将每个故事复制并粘贴到数据库中,但希望让程序自动将标记数据从Word文件中提取到数据库中的相应字段中。 / p>
他必须在Microsoft Word中做什么才能将每组段落表示为“故事内容”,将每个标题称为“故事标题”等。先决条件是此标记在文档中无法显示。我知道Word 2007文件基本上是压缩的XML文件所以我认为这是可能的,我认为样式表是我们需要的,但我如何准确准备Word文档以便他添加他们被正确标记的故事?
我认为C#4.0的新 COM Interop 功能是分析Word文件并从嵌入式故事中仅检索标题,描述和内容所需要的,但是如何我在技术上这样做吗?有没有人有例子?
有没有人有经验做这样的项目(将Microsoft Word作为semnatic数据文件阅读)可以分享?
答案 0 :(得分:2)
我要做的是使用样式。为每种类型的内容设置一种样式,并编写一个逐段遍历文档并吐出相应文本文件的宏。
答案 1 :(得分:1)
好的,这可以通过多种方式解决。
首先,我建议您将文件保存为* .txt,以便解析一些纯文本。
然后,你的朋友在写作期间必须保持一致,因为你要创造的东西(文本解析器)需要一致性。
制定一些规则:
之后,加载文件,并使用上述规则解析它。
{享受}
答案 2 :(得分:0)
我强烈建议使用这种技术。
使用Word的书签功能标记每个“故事”的开头和结尾。要查看“书签”,请转到“文字选项”,“高级”,“显示文档内容”,然后选中“显示书签”。
然后只需浏览收集书签之间内容的文件。
相当简单,这是我从Word 6.x开始使用的一种技术。唯一的问题是必须提出200个书签名称。然而,这可能是一个优势,因为书签名称可能会迁移到数据库中的“名称”字段。
另一种技术是定义构成故事的特定风格或风格。然后,您提取样式。如果作者没有受到纪律处分,这有点难以理解并且容易出错。
最后,如果这些“故事”可以放入“文本框”中,您只需提取文本框内容即可。这种方法的问题是文本框的限制和文档布局的变化,作者可能不会应用什么。
还有其他方法,但书签方法最容易使用和实现。我会尽力回复您的任何意见/问题。
MSDN在http://social.msdn.microsoft.com/Search/en-US?query=vsto%20word%20bookmark&refinement=-112&ac=3
MSDN在http://social.msdn.microsoft.com/Search/en-US?query=vsto%20word%202007&refinement=-112&ac=3
答案 3 :(得分:0)
以下是docx文档的xml,其中包含一个包含单词“Title”的标题和两个包含单词“Content”的段落。在你的朋友写作时研究小说的样本文件,对所有标题和段落元素使用统一的格式,你将能够很容易地解析它。内容在压缩的docx文件的word / document.xml中
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="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: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:wne="http://schemas.microsoft.com/office/word/2006/wordml"><w:body><w:p w:rsidR="005C78DC" w:rsidRDefault="00350339" w:rsidP="00350339"><w:pPr><w:pStyle w:val="Heading1"/></w:pPr><w:r><w:t>Title</w:t></w:r></w:p><w:p w:rsidR="00350339" w:rsidRDefault="00350339" w:rsidP="00350339"><w:r><w:t>Content</w:t></w:r></w:p><w:p w:rsidR="00350339" w:rsidRPr="00350339" w:rsidRDefault="00350339" w:rsidP="00350339"><w:r><w:t>Content</w:t></w:r></w:p><w:sectPr w:rsidR="00350339" w:rsidRPr="00350339" w:rsidSect="005C78DC"><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>