找回密码
 加入
搜索
查看: 2738|回复: 13

[系统综合] 如何将二维数组写入新建xls

[复制链接]
发表于 2021-4-23 14:11:27 | 显示全部楼层 |阅读模式
翻遍了论坛,旧的UDF和一些代码基本都不能用了,AU3:3.3.14.2,office2010-2016

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

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

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

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

发表于 2021-4-23 14:33:25 | 显示全部楼层
_Excel_RangeWrite 本身就支持写入二维数组。需要office

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

点评

感谢,目前用的就是_Excel_RangeWrite,不过还是很想不打开office就能生成。  发表于 2021-4-26 10:27
发表于 2021-4-23 19:09:47 来自手机 | 显示全部楼层
可以直接输出成CSV的文本文件。这种文件可以直接被xls软件打开。

点评

感谢!这也是个方法。  发表于 2021-4-26 10:25
发表于 2021-4-23 21:01:09 | 显示全部楼层
本帖最后由 itzyx 于 2021-4-23 21:05 编辑
#include<Excel.au3>
#include<Array.au3>

_ArrayToexcel()


Func _ArrayToexcel()
        Local $Array[3][2]=[['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

评分

参与人数 1金钱 +10 收起 理由
小兵 + 10 测试不能创建文件,已创建可以写入

查看全部评分

发表于 2021-4-23 21:12:14 | 显示全部楼层
本帖最后由 chzj589 于 2021-4-26 11:27 编辑

给你二个例子参考
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1金钱 +10 收起 理由
小兵 + 10 谢谢!

查看全部评分

发表于 2021-4-27 00:30:28 | 显示全部楼层
还是论坛大佬多,兵哥以后要常来论坛发发帖~

点评

谢发哥一直以来的帮助  发表于 2021-4-27 10:18
 楼主| 发表于 2021-4-27 10:08:44 | 显示全部楼层
当数据较多时,_Excel_RangeWrite 就不堪用了
发表于 2021-4-27 21:02:43 | 显示全部楼层
数据库/数组导出至excel还是比较慢的,而且在导出期间,单元格不能点击,否则报错。
后来怕人不知道,还加了一行提示,并预测多少分钟
发表于 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

转论坛大大的,数据多的时候速度很快
发表于 2021-5-14 11:39:49 | 显示全部楼层
看一看,怎么解决的
发表于 2021-5-28 11:38:45 | 显示全部楼层
看看怎么实现的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 02:36 , Processed in 0.088008 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表