如何读取excel文件

如何读取excel文件,第1张

您好,方法

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8054070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存