我正在寻找一种从Word文件中提取/抓取数据到数据库的方法.我们的公司程序与MS Word文件中记录的客户会议记录,主要是由于历史和惯性.
我希望能够从这些会议纪要行动项目拉进一个数据库,以便我们可以从一个Web界面访问它们,把它们变成任务,因为他们完成了更新.
这是最好的方法:
最后一个是我的吸引力,因为网络界面正在使用Django建成的,但我从来没有使用win32com或蟒蛇试图脚本字.
编辑:我已经开始提取与VBA的文本,因为它使得它更容易一些处理Word对象模型.我遇到了一个问题 - 所有文本都在表格中,当我将字符串拉出我想要的CELLS时,我会在每个字符串的末尾得到一个奇怪的小方框字符.我的代码看起来像:
sFile = "D:\temp\output.txt"
fnum = FreeFile
Open sFile For Output As #fnum
num_rows = Application.ActiveDocument.Tables(2).Rows.Count
For n = 1 To num_rows
Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text
Assign = Application.ActiveDocument.Tables(2).Cell(n, 3).Range.Text
Target = Application.ActiveDocument.Tables(2).Cell(n, 4).Range.Text
If Target = "" Then
ExportText = ""
Else
ExportText = Descr & Chr(44) & Assign & Chr(44) & _
Target & Chr(13) & Chr(10)
Print #fnum, ExportText
End If
Next n
Close #fnum
Run Code Online (Sandbox Code Playgroud)
小控制字符框有什么用?是什么类型的字符代码来自Word?
我有一个Word文档,其中包含大约4000个表单字段,我必须将其导出到数据库.问题是4000个字段中没有一个在"书签"字段中有信息,因此我无法获得存储在其中的信息.
我正在尝试创建一个宏来帮助编写书签(FormField.Name)的过程,但无法设法做到正确.问题是我想要更改用户选择中包含的FormFields的名称,并且只更改它们.我设法找到了这个解决方案:
Sub Macro2()
Dim myFile As String
Dim fnum As Integer
Dim sFileText As String
Dim currentField As FormField
myFile = "c:\testMacro.txt"
fnum = FreeFile()
Open myFile For Input As fnum
For Each currentField In Selection.FormFields
Input #fnum, sFileText
With currentField
.StatusText = sFileText
.OwnStatus = True
End With
currentField.Select
Application.WordBasic.FormFieldOptions Name:=sFileText
Next currentField
End Sub
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为在For Each循环中更改了Selection对象,之后它只包含选择的第一个FormField.
所以这是我的问题,有没有办法保存当前选择并在更改后加载它.
我试过了 :
Dim mySelection as Selection
Set mySelection = Selection
Run Code Online (Sandbox Code Playgroud)
但是如果我改变了Selection,变量mySelection也会改变(这很正常......)而且我没有找到任何克隆对象的方法.
有人知道如何做到这一点?
谢谢
我在网上找到了一个VBA宏来调整Word文档中的所有图像:
Sub ResizeAllImages()
''# make all images (both inline and floating)
''# 11 cm wide while preserving aspect ratio
Dim oShp As Shape
Dim oILShp As InlineShape
For Each oShp In ActiveDocument.Shapes
With oShp
.Height = AspectHt(.Width, .Height, _
CentimetersToPoints(11))
.Width = CentimetersToPoints(11)
End With
Next
For Each oILShp In ActiveDocument.InlineShapes
With oILShp
.Height = AspectHt(.Width, .Height, _
CentimetersToPoints(11))
.Width = CentimetersToPoints(11)
End With
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
我找不到可用于对齐所有图像的方法的名称.有谁知道我需要添加什么,以及我必须添加它的位置?
最后,我想删除我觉得太小的图片.我该怎么做...如果形状的宽度小于5,并且形状的高度小于5,则删除形状.
为了便于阅读大量在线文本,我有时希望将所有内容粘贴到单词中,然后重新排列.我用句号 - 手动线替换每个句点 - 空格,这为每个句子提供了一个新的行.我就读得更好了.由于我粘贴了所有东西,图形也来了,所以我希望能够控制所有图像的大小,并摆脱任何不必要的图像.
我需要一个vba宏来搜索MS Word 2007文档中字体颜色为黄色的所有文本并将其更改为红色.打印输出中不会显示黄色.手动选择和更改将花费我几个小时.
我希望我的Word应用程序在自动化完成后进入前台.
Excel中的等效项是直接的 - Excel Application对象具有.Hwnd属性,您可以将其与Windows API结合使用:
SetForegroundWindow((IntPtr)excelApp.Hwnd);
Run Code Online (Sandbox Code Playgroud)
但是,Word应用程序没有.Hwnd属性.
我尝试在这个序列中使用Activate():
wordDoc.Activate();
wordApp.Activate();
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我已经看过使用应用程序名称查找进程,但可能有多个Word运行副本.
谢谢
乔
我正在Word.docm(启用了宏的Word 2013 doc)中构建表单,旨在对Access数据库进行编程以从完成的表单中导入数据。我已经放置了textBox和comboBox控件来接收用户输入,但是我无法取出数据。
我看过的示例使用了Document.FormFields这样的集合(在Word中):
Dim fld as FormField
for each fld in ActiveDocument.FormFields
Debug.Print fld.Name & " - " & fld.Result.Text
next
Run Code Online (Sandbox Code Playgroud)
但是在我的文档中Document.FormFields是空的,但是Document.Fields有19个元素,恰好是表单中控件的数量。很好,除了我似乎无法使用Field对象获得任何控件的名称或值。Field.Result.Text始终为空白,并且没有Field.Name属性。
那么,Field对象和FormField对象之间有什么区别?为什么我Fields看到的所有示例都使用我的控件FormFields?
我使用了错误的表单控件吗?遗留控件,ActiveX控件和内容控件共有三种类型(我希望我不是唯一认为这很荒谬的一种)。我正在使用ActiveX类型。
我有许多大型Microsoft Word文档,其中包含许多Microsoft Excel电子表格中的许多链接文件.打开Word文档时,即使未选中"打开时更新链接文件"选项:

Word仍会通过打开和关闭每个链接的相关Excel电子表格来检查其源头的每个链接(因此,对于x个链接,即使来自同一个电子表格,Word也会打开并关闭电子表格x次).这意味着打开文档需要很长时间.
我发现如果包含链接对象源的电子表格已经打开,文档打开得更快,因此Word不会保持打开,关闭,重新打开它们.
到目前为止,我所拥有的解决方案的开头是创建链接对象的所有文件路径的列表,通过以下VBA代码完成:
Sub TypeArray()
Dim List(), Path As String
Dim i, x As Integer
Dim s As InlineShape
Dim fso As FileSystemObject, ts As TextStream
Set fso = New FileSystemObject
Set ts = fso.OpenTextFile("C:\MyFolder\List.txt", 8, True)
With ts
.WriteLine (ActiveDocument.InlineShapes.Count)
End With
For Each s In ActiveDocument.InlineShapes
Path = s.LinkFormat.SourcePath & "\" _
& s.LinkFormat.SourceName
With ts
.WriteLine (Path)
End With
Next s
End Sub
'-------------------------------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我想使用Excel VBA创建一个word文档,并添加各种字体样式和大小的文本.这是我的代码:
Sub CreateNewWordDoc()
Dim wrdDoc As Word.Document
Dim wrdApp As Word.Application
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Add
Dim charStart As Long
Dim charEnd As Long
With wrdDoc
For i = 1 To 3
charStart = wrdApp.Selection.Start
.Content.InsertAfter (" some text")
charEnd = wrdApp.Selection.End
If i = 1 Then
'set the text range (charStart,charEnd) to e.g. Arial, 8pt
Else
If i = 2 Then
'set the text range (charStart,charEnd) to e.g. Calibri, 10pt
Else
'set the text range …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式更改"不要在相同样式的段落之间添加空格".为了解决这个问题,我录制了一个宏,在此期间我打开了段落对话框(页面布局>段落),选中了复选框(不添加空格)和宏,在此期间我取消选中复选框(添加空格).两者都不影响"不要在相同样式的段落之间添加空格"...他们有相同的代码:
Sub AddSpaceBetweenParagraphsOfSameStyle()
'
' AddSpaceBetweenParagraphsOfSameStyle Macro
' Add space between paragraphs of the same style.
'
With Selection.ParagraphFormat
.LeftIndent = InchesToPoints(0.5)
.RightIndent = InchesToPoints(0)
.SpaceBefore = 12
.SpaceBeforeAuto = False
.SpaceAfter = 12
.SpaceAfterAuto = False
.LineSpacingRule = wdLineSpaceMultiple
.LineSpacing = LinesToPoints(1)
.Alignment = wdAlignParagraphLeft
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = InchesToPoints(-0.25)
.OutlineLevel = wdOutlineLevelBodyText
.CharacterUnitLeftIndent = 0
.CharacterUnitRightIndent = 0
.CharacterUnitFirstLineIndent = 0
.LineUnitBefore …Run Code Online (Sandbox Code Playgroud) 我在Word 2013中有一个模板文档,用户填写了大量的Legacy Text FormFields.在文档的最后,我添加了一个按钮,将答案编译成没有格式化的字符串,然后将其复制到剪贴板.
它可以工作,但是在读取每个FormField时,Word文档会在每个文本字段和文档末尾之间来回跳过.这在视觉上令人担忧.有没有办法收集每个FormField的值而不用Word将光标/焦点移动到每个字段时读取?
以下是代码示例:
Private Sub cmdCreateNote_Click()
Call cmdClearNote_Click
Dim ff As FormFields
Set ff = ActiveDocument.FormFields
Dim Output As String
Output = ff("ddReviewType").Result & vbCrLf
If ff("chFacInfo").Result Then
Dim FacInfo
FacInfo = Array("Field1: ", _
"Field2: ", _
"Field3: ", _
"Field4: ", _
"Field5: ")
Output = Output & "FIRST SECTION" & vbCrLf
For Index = 1 To 5
If ff("chFacInfo" & Index).Result Then
Output = Output & FacInfo(Index - 1) & ff("txFacInfo" & …Run Code Online (Sandbox Code Playgroud)