使用VB.Net+word组件提取数据

    技术2022-07-10  119

    由于教程终于算是进入尾声了,我决定将教程中所有的例子做个列表,供展示使用。 由于写此教程时采用了比较规范的命名方式,所以凡是出现示例的地方都类似于以下语句:

    需要做的工作: 1、提取每一段数据,分析是否是示例。 2、如果是示例标题,那么提取后,将【项目】内容除去,只保留示例编号和示例名称。 例如,原来的内容: 【例 21.8】【项目:code21-008】Word基本信息。 获得的内容: 【例 21.8】Word基本信息。

    一开始我以为手动复制粘贴很快可以达到目的,当操作到第10个示例时,我发现自己想错了,因为教程内容太多了。

    如果真要一个一个复制粘贴,太费时费力,又是一项大工程,于是我还是祭出了VB.Net。 具体代码如下,请自行添加对word组件的引用:

    Imports System.IO Imports Microsoft.Office.Interop Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim modelFile As String = "G:\save\书稿\正文.docx" Dim outputFile As String = "G:\save\书稿\示例.txt" Dim sw As New StreamWriter(outputFile) Dim wordApp As New Word.Application Dim doc As Word.Document doc = wordApp.Documents.Open(modelFile) For Each Para As Word.Paragraph In doc.Paragraphs Dim paraText As String = Para.Range.Text If paraText.Length > 5 Then If paraText.Substring(0, 2) = "【例" Then '由于段落包含了回车换行,所以不用WriteLine方法,否则会增加空白行 sw.Write(delProjectName(paraText)) End If End If Next doc.Close() wordApp.Quit() sw.Close() MessageBox.Show("ok") End Sub '对数据进行筛选,去掉不需要的部分 Function delProjectName(ByVal paraText As String) As String Dim posStart As Integer Dim posEnd As Integer Dim somethingreplace As String posStart = paraText.IndexOf("项目:") If posStart > 0 Then posEnd = paraText.IndexOf("】", posStart) somethingreplace = paraText.Substring(posStart - 1, posEnd - posStart + 2) Return paraText.Replace(somethingreplace, "") End If Return paraText End Function End Class

    由于内容太多,运行代码后进入等待,不过相比人工复制粘贴,等待的时间其实挺愉快的。 转换出来的内容:

    最后去除一些不正确的地方,将记事本的滚动条拉到最下面,看了看状态栏,500行,也就是500个例子。

    Processed: 0.010, SQL: 9