小兵 发表于 2021-4-23 14:11:27

如何将二维数组写入新建xls

翻遍了论坛,旧的UDF和一些代码基本都不能用了,AU3:3.3.14.2,office2010-2016

现要将二维数组(多列、多行)写入新建xls,求以下几种方法:

1、在没有安装Office的情况下(最佳)

2、或者退一步,在有office的情况下

3、在有offce的情况下,如何打开新建文档自动写入并保存?

zch11230 发表于 2021-4-23 14:33:25

_Excel_RangeWrite 本身就支持写入二维数组。需要office

如果不需要office的话,可以用ado,但比较局限,除非写和读xls的操作都是自己写的。

gyp2000 发表于 2021-4-23 19:09:47

可以直接输出成CSV的文本文件。这种文件可以直接被xls软件打开。

itzyx 发表于 2021-4-23 21:01:09

本帖最后由 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-23 21:12:14

本帖最后由 chzj589 于 2021-4-26 11:27 编辑

给你二个例子参考**** Hidden Message *****

haijie1223 发表于 2021-4-27 00:30:28

还是论坛大佬多,兵哥以后要常来论坛发发帖~

小兵 发表于 2021-4-27 10:08:44

当数据较多时,_Excel_RangeWrite 就不堪用了

不是小灵通 发表于 2021-4-27 21:02:43

数据库/数组导出至excel还是比较慢的,而且在导出期间,单元格不能点击,否则报错。
后来怕人不知道,还加了一行提示,并预测多少分钟

rally 发表于 2021-4-29 18:51:32

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

转论坛大大的,数据多的时候速度很快

yongge9999 发表于 2021-5-14 11:39:49

看一看,怎么解决的

风过无痕 发表于 2021-5-28 11:38:45

看看怎么实现的
页: [1]
查看完整版本: 如何将二维数组写入新建xls