Lua使用luacom模块操作EXCEL

--导入luacom模块
require('luacom')
require('lfs')    --导入lfs模块用于取得当前路径,和操作EXCEL无关
local sMainPath = lfs.currentdir()    --取得当前路径 

--创建EXCEL对象
MyExcel = luacom.CreateObject("Excel.Application")    --创建EXCEL对象
--MyExcel = luacom.CreateObject("Ket.Application")    --创建WPS表格对象,新版的WPS已经兼容了MSO,就不用这么写了
MyExcel.Visible = false    --不显示EXCEL窗口
MyBook = MyExcel.WorkBooks:Open(sMainPath .. '\\XXX.XLS', 0, 0)    --打开EXCEL文件,应使用绝对路径
MySheet = MyBook.Sheets(1)    --使用第一个Sheet,可以用Sheets('SheetName')来指定Sheet

--少量读取/写入数据
--   使用Cells来写
for i = 1, 100 do
    MySheet.Cells(i, 1).Value2 = 'A' .. i    --Cells的参数为行、列,从1开始
    MySheet.Cells(i, 2).Value2 = 'B' .. i
end
--   使用Range来写
MyRange = MySheet:Range("A1:B100")    --取得表中的一个区域
for i = 1, 100 do
    MyRange:Offset(i, 0).Value2 = 'A' .. i    --Offset的参数为行、列偏移量,从0开始
    MyRange:Offset(i, 1).Value2 = 'B' .. i
end
--   使用 Cells来读 
local x = tostring(MySheet.Cells(i, 2).Value2)
local y = tonumber(MySheet.Cells(i, 2).Value2)
--   使用 Range来读 
MyRange = MySheet:Range("A1")    --读单独的单元格
print(MyRange.Value2)
MyRange = MySheet:Range("A1:B100")    --读一个区域
print(MyRange.Value2[1][2])    -- 结果为二维数组
print(MyRange:Offset(0,1).Value2[1][1])    --带偏移量的 结果,也为二维数组
--* 偏移量Offset会扩展Range(有需要的话) 
--* 超出 Range的范围会取得nil 
--* Value和Value2的区别在于 Value2没有日期型和货币型,使用双精度型代替 

--大量读取/写入数据 
x = {}    --定义一个二维表(二维数组),模拟Excel的Range
for i = 1, 1000 do
    x[i] = {'A1'..i,'B2'..i}    --每一行为一个表(数组)
end
MySheet:Range("A2:B801").Value2 = x    --将表写入Range,Range大于数组,少的数据用空白(#N/A)填充,Range小于数组,多的数据丢弃
--注意:luacom模块有bug,当数据量过大时会造成溢出,可靠的数据量约为6K个单元格,写更多的数据可以分段写入(单列数据,但这个量随着每行单元的增多而增多,例如当每行10个单元格时,可靠的数据量约为12K个单元格),如下:
x={}
for i = 1, 6000 do
    x[i]={1}
end
MySheet:Range("A1:A6000").Value2 = x
for i = 1, 6000 do
    x[i]={2}
end
MySheet:Range("A6001:A12000").Value2 = x

--关闭文件
MyExcel.DisplayAlerts = false    --关闭时不提示
MyBook:Save()    --保存打开的表,也可以用MyExcel.ActiveWorkBook:Save()    --保存当前表
MyExcel:Quit()    --退出EXCEL
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值