如何将二维数组写入新建xls
翻遍了论坛,旧的UDF和一些代码基本都不能用了,AU3:3.3.14.2,office2010-2016现要将二维数组(多列、多行)写入新建xls,求以下几种方法:
1、在没有安装Office的情况下(最佳)
2、或者退一步,在有office的情况下
3、在有offce的情况下,如何打开新建文档自动写入并保存?
_Excel_RangeWrite 本身就支持写入二维数组。需要office
如果不需要office的话,可以用ado,但比较局限,除非写和读xls的操作都是自己写的。 可以直接输出成CSV的文本文件。这种文件可以直接被xls软件打开。 本帖最后由 itzyx 于 2021-4-23 21:05 编辑
#include<Excel.au3>
#include<Array.au3>
_ArrayToexcel()
Func _ArrayToexcel()
Local $Array=[['1','2'],['2','4'],['4','8']];二维数组
Local $oexcel = _Excel_Open() ;创建应用对象
Local $path = @DesktopDir & '\1.xls' ;Excel打开路径
$owork = _Excel_BookOpen($oexcel, $path) ;打开一个现有的工作簿
Local $swork = _Excel_RangeWrite($owork, "Sheet1",$Array, "A1:B3", True) ;写入二维数组
_Excel_BookClose($owork) ;关闭打开的EXCEL ,默认为保存
EndFunc
本帖最后由 chzj589 于 2021-4-26 11:27 编辑
给你二个例子参考**** Hidden Message *****
还是论坛大佬多,兵哥以后要常来论坛发发帖~ 当数据较多时,_Excel_RangeWrite 就不堪用了 数据库/数组导出至excel还是比较慢的,而且在导出期间,单元格不能点击,否则报错。
后来怕人不知道,还加了一行提示,并预测多少分钟 Func _ArrayToString2D(Const ByRef $avArray1, $sDelim = @CR);将2维数组转化为可放入剪切板中的格式(可直接黏贴进Excel格式)
If Not IsArray($avArray1) Then Return SetError(1, 0, "")
If UBound($avArray1, 0) <> 2 Then Return SetError(3, 0, "");;;;;必须为二维数组
Local $sResult, $iUBound1 = UBound($avArray1, 1), $iUBound2 = UBound($avArray1, 2)
Dim $ray[$iUBound1]
For $i = 0 To $iUBound1 - 1
For $x = 0 To $iUBound2 - 2
;~ $ray[$i] = $ray[$i] & $avArray1[$i][$x] & @TAB;;;;连接字符串,使用TAB符号:到倒数第2个为止
$ray[$i] = $ray[$i] & StringRegExpReplace($avArray1[$i][$x],'(?m)[\n|\r]','') & @TAB ;删除元素中的换行符
Next
;~ $ray[$i] = $ray[$i] & $avArray[$i][$iUBound2-1]
$ray[$i] = $ray[$i] & StringRegExpReplace($avArray1[$i][$x],'(?m)[\n|\r]','')
Next
for $i = 0 to $iUBound1 -1
$sResult = $sResult & $ray[$i] & @CR
Next
Return StringTrimRight($sResult, StringLen($sDelim))
EndFunc ;==>_ArrayToString2D
Func _ArrayToClip2D(Const ByRef $avArray1);将2维数组读进剪贴板中
Local $sResult = _ArrayToString2D($avArray1, @CR)
If @error Then Return SetError(@error, 0, 0)
Return ClipPut($sResult)
EndFunc ;==>_ArrayToClip2D
转论坛大大的,数据多的时候速度很快 看一看,怎么解决的 看看怎么实现的
页:
[1]