libxl库能无需环境依赖实现后台读写xlsx表格,可用于AHK操控浏览器等采集数据后,用libxl库后台把数据整理保存下来。

 

以下展示libxl库能实现的效果,将下图正式表格,一键转换成下下图的原始数据表

 

转换后的效果图

 

示例链接:

 

将数据全部读取到数组写入到新表.ahk

#Include %A_ScriptDir%/../Lib/libxl.ahk
SetWorkingDir %A_ScriptDir%
SetBatchLines -1

libxl.init(A_ScriptDir "/../Lib/64bit/libxl.dll")  ; 初始化加载指定路径的libxl.dll

/*
book :=libxl.New("xls")  ; 新建xls
; msgbox,% IsObject(book)

book := libxl.Load("可读写的模板新.xls")  ; 读取xls
sheet :=book.getsheet(0)
*/

book := libxl.Load("测试读取模板.xlsx")
sheet := book.getsheet(0)

a := sheet.firstRow()
b := sheet.lastRow()
c := sheet.firstCol()
d := sheet.lastCol()
arr := []
Loop % b - a + 1
{
  x := A_Index
  Loop % d - c + 1
    Try y := A_Index
      , arr.Push({ x : x, y : y, ct : sheet.readStr(x-1,y-1) })
    ; 	catch
    ; 		arr.Push({x:x,y:y,ct:""})  ; 此步无效,会多出一行一列
}

/*
Loop,% arr.MaxIndex()
{
  ;msgbox,% arr[A_Index].ct
  if RegExMatch(arr[A_Index].ct,"^\d{3}")
    drr.Push({x:arr[A_Index].x,y:arr[A_Index].y,ct:arr[A_Index].ct})
}
*/

drr := arr

book2:=libxl.New("xlsx")
sheet2 :=book2.Addsheet("转存内容")

xx := 0
yy := -1
x0 := drr[1].x - 1
Loop % drr.MaxIndex()
{
  x := drr[A_Index].x-1
  y := drr[A_Index].y-1
  if (x0=x)
    xx := xx, yy := yy + 1
  else
    xx := xx + 1, yy := 0
    Try sheet2.__Item[xx,yy] := drr[A_Index].ct
  x0 := x
}
book2.save("新表匹配数据.xlsx")
book := book2 := ""
;dd :=sheet.readStr(0,5)
;dd2 :=sheet.readFormula(3,3)
;msgbox,% rowFirst "`n" rowLast "`n" colFirst "`n" colLast
;msgbox % "C4单元格值:	" dd "`n表格(3,3)值:	" dd2 "`n表格(3,3)值:	" dd3
;sheet.copyCell(5,1,13,3)
;msgbox,% sheet.writeStr(23, 2, "adasd")

MsgBox 0x40040, , 新文档转存完毕
Return

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。