1、新建一个EXCEL表,输入内容以供后面程序读取。
2、保存在任意路径下。
3、再确定读取Excel文件的方法,这里使用文件随机定位函数fseek()来读取EXCEL,它的一般调用格式为:fseek(文件指针,位移量,起始位置)
4、位移量指重新定位时的字节偏移数,表示相对于基址的字符数,通常是一个长整型数,可以是整形常量,整形表达式等。如果用整型常量,需要再后面加上字母“L”;如果使用整形表达式需要用“(long)(表达式)”强制转换成长整形。
5、起始位置:指重新定位时的基准点,也就是基址,用整数或符合常量表示。
6、如此例,要读取上面准备好的EXCEL表里的内容,使用fseek(fp, 5L, SEEK_CUR),以下为详细代码。
7、运行界面,会要求输入文件名,当输入之前准备的EXCEL的文件名后,程序就会读取EXCEL的内容并显示在下面,
8、如果发现读取数据全为0或者读取数据顺序位置不正确,是没有理解fseek( )函数的参数使用方法,第二个参数的偏移量有错误,如以下案例,
还是先准备好EXCEL表格。
9、在VISUAL STUDIO里编写代码。
10、运行结果全是0。
万能的vba可以实现。下面这段代码所实现的功能就是从EXCEL读取数据后批量生成WORD文档的。Dim gjzArr(1 To 100, 1 To 2) '1-关键字 2-值
Dim gjzGs As Integer
Dim gjzZD 'key-关键字 item-序号
Sub scbG(x As Integer)
On Error GoTo err
Dim lastHH As Integer
Dim I As Integer, J As Integer
Dim MB As String
Dim TName As String
Dim hzMc As String
Dim wordApp
Dim myDoc
Dim Str1 As String, Str2 As String
Application.ScreenUpdating = False
gjzGs = 0
Set gjzZD = CreateObject("SCRIPTING.DICTIONARY")
'读取B列的值
Call dqsJ(2)
'读取D列的值
Call dqsJ(4)
'读取F列的值
Call dqsJ(6)
MB = Trim(Range("P2").Text)
hzMc = Split(MB, ".")(1)
TName = ThisWorkbook.Path &"\报告\" &gjzArr(gjzZD("B7"), 2) &"." &hzMc
FileCopy MB, TName
Set wordApp = CreateObject("word.application")
wordApp.Visible = True
Set myDoc = wordApp.DOCUMENTS.Open(TName)
myDoc.Unprotect Password:="123456"
myDoc.Activate
With wordApp.ActiveWindow.View
.ShowRevisionsAndComments = False
.RevisionsView = wdRevisionsViewFinal
End With
Dim Bj As Boolean
With wordApp
'关键字替换
For J = 1 To gjzGs '
Str1 = "&" &gjzArr(J, 1) &Space(1)
Str2 = gjzArr(J, 2)
Bj = True
Do While Bj
.Selection.HomeKey Unit:=wdStory '光标置于文件首
If .Selection.Find.Execute(Str1) Then '查找到指定字符串
.Selection.Text = Str2 '替换字符串
Else
Bj = False
End If
Loop
Next J
End With
'写入表格内容
Dim myTable
'表一填写
Set myTable = myDoc.Tables(1)
myTable.Range.Cells(2).Range.Text = gjzArr(gjzZD("B24"), 2) '房屋权证号
myTable.Range.Cells(4).Range.Text = gjzArr(gjzZD("B20"), 2) '房屋所有权人
myTable.Range.Cells(6).Range.Text = gjzArr(gjzZD("B26"), 2) '产别
myTable.Range.Cells(8).Range.Text = gjzArr(gjzZD("B21"), 2) &gjzArr(gjzZD("B22"), 2) &gjzArr(gjzZD("B23"), 2) '房屋坐落
myTable.Range.Cells(18).Range.Text = gjzArr(gjzZD("B27"), 2) '幢号
myTable.Range.Cells(19).Range.Text = gjzArr(gjzZD("B28"), 2) '房号
myTable.Range.Cells(21).Range.Text = gjzArr(gjzZD("B29"), 2) '总层数
myTable.Range.Cells(22).Range.Text = gjzArr(gjzZD("B30"), 2) '所在层数
myTable.Range.Cells(23).Range.Text = gjzArr(gjzZD("B31"), 2) '建筑面积
myTable.Range.Cells(27).Range.Text = gjzArr(gjzZD("B25"), 2) '房屋共有人
If myDoc.Revisions.Count >= 1 Then myDoc.Revisions.AcceptAll
myDoc.Protect Password:="123456", NoReset:=False, Type:=wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
myDoc.Save
myDoc.Close
wordApp.Quit
Application.ScreenUpdating = True
MsgBox ("报告已经完成")
Exit Sub
err:
MsgBox ("同名文件已经打开,请关闭后重新运行!")
End Sub
Sub dqsJ(Lh As Integer)
Dim lastHH As Integer
If Lh <= 1 Then
MsgBox ("不可选择小于等于1的列")
Exit Sub
End If
lastHH = Cells(1000, Lh - 1).End(xlUp).Row
For I = 1 To lastHH
If Trim(Cells(I, Lh - 1).Text) <>"" Then
gjzGs = gjzGs + 1
myT1 = Replace(Cells(I, Lh).Address, "$", "")
myT2 = Cells(I, Lh).Text
gjzZD.Add myT1, gjzGs
gjzArr(gjzGs, 1) = myT1
gjzArr(gjzGs, 2) = myT2
End If
Next I
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)