找回密码
 加入
搜索
查看: 2894|回复: 11

[AU3基础] 求助AU3如何对EXCEL某列进行升序排序

  [复制链接]
发表于 2018-9-22 17:22:00 | 显示全部楼层 |阅读模式
比如我要升序排序F列,代码该怎么写
发表于 2018-9-22 23:30:48 | 显示全部楼层
Local $oExcel = ObjCreate("Excel.Application")
With $oExcel
    .SheetsInNewWorkbook = 1
    .Visible = 1
    .WorkBooks.Add
    .ActiveWorkbook.Worksheets(1).Name = "sheet"
EndWith


Local $array_1[5] = ["Id","Sort","Sort1","money","Sort3"]
Local $array_2[5] = ["0001","afan","pusofalse","123435","netegg"]
Local $array_3[5] = ["0002","haijie1223","lynfr8","98764","Maths"]
Local $array_4[5] = ["0003","menfan1","menfan1","34522","hzxymkb"]
For $i = 0 To Ubound($array_1) - 1
    $oExcel.Activesheet.Cells(1,($i+1)).Value = $array_1[$i]
    $oExcel.Activesheet.Cells(2,($i+1)).Value = $array_2[$i]
    $oExcel.Activesheet.Cells(3,($i+1)).Value = $array_3[$i]
    $oExcel.Activesheet.Cells(4,($i+1)).Value = $array_4[$i]
Next

; 对文件进行升序排序,而不考虑标题行列标题
Local $nb_colonne = $oExcel.ActiveSheet.UsedRange.Columns.Count ; 计算列的数量
Local $nb_ligne   = $oExcel.ActiveSheet.UsedRange.Rows.Count    ; 计算行数
$oExcel.Range($oExcel.Cells(2,1), $oExcel.Cells($nb_ligne,$nb_colonne)).Sort ($oExcel.Range("D1"),1)
是这意思吧?
 楼主| 发表于 2018-9-23 00:01:05 | 显示全部楼层

谢谢老师,就是这个意思。还有个问题想请教一下。有时候从listview控件读取所有值写入excel会崩溃。需要设置错误返回还是?我把代码贴上
Local $ListColumnCount = _GUICtrlListView_GetColumnCount($ListView3)
        Local $ListRowCount = _GUICtrlListView_GetItemCount($ListView3)
        If $ListRowCount <> 0 Then
                Dim $ItemArray[1][$ListColumnCount]
                For $i = 0 To $ListRowCount - 1
                        $aItem = _GUICtrlListView_GetItemTextString($ListView3, $i)
                        _ArrayAdd($ItemArray, $aItem, 0)
                Next
                _ArrayDelete($ItemArray, 0)
                Local $oAppl = _Excel_Open()
                Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\拣货单.xlsx")
$oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook.application.transpose($ItemArray)
                        $oWorkbook.activesheet.Range("A1:F" & $ListRowCount + 1).Select ;选中区域
                        $oWorkbook.activesheet.range("A1:F" & $ListRowCount).borders.linestyle = 1 ;设置边框
EndIf
发表于 2018-9-24 11:11:37 | 显示全部楼层
121044246 发表于 2018-9-23 00:01
谢谢老师,就是这个意思。还有个问题想请教一下。有时候从listview控件读取所有值写入excel会崩溃。需要 ...

这样试试

    Local $ListColumnCount = _GUICtrlListView_GetColumnCount($ListView3)
        Local $ListRowCount = _GUICtrlListView_GetItemCount($ListView3)
        If $ListRowCount <> 0 Then
                Dim $ItemArray[1][$ListColumnCount]
                For $i = 0 To $ListRowCount - 1
                        $aItem = _GUICtrlListView_GetItemTextString($ListView3, $i)
                        _ArrayAdd($ItemArray, $aItem, 0)
                Next
                _ArrayDelete($ItemArray, 0)
               ; Local $oAppl = _Excel_Open()
                                ;Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\拣货单.xlsx")
                ;Local $oAppl = _Excel_Open()
                ;Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\拣货单.xlsx")
                Local $oWorkbook = ObjCreate("Excel.Application") ; 创建Excel对象
                $oWorkbook.Visible = 1
                $oWorkbook.SheetsInNewWorkbook = 1 ; 设置要创建的工作表数量
                Local $oBook = $oWorkbook.Workbooks.Add ; 在Excel对象中创建工作簿对象
                Local $oSheet = $oBook.Sheets(1) ; 为工作表1创建工作表对象(名称或索引)
                $oSheet.Name = 'Sheet1' ; 更改属性名称                
                        $oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook.application.transpose($ItemArray)
                        $oWorkbook.activesheet.Range("A1:F" & $ListRowCount + 1).Select ;选中区域
                        $oWorkbook.activesheet.range("A1:F" & $ListRowCount).borders.linestyle = 1 ;设置边框
                EndIf

评分

参与人数 1金钱 +50 贡献 +10 收起 理由
lpxx + 50 + 10 赞一个!

查看全部评分

 楼主| 发表于 2018-9-24 22:59:58 | 显示全部楼层
本帖最后由 121044246 于 2018-9-24 23:07 编辑

好的。就是偶尔会出现错误,今天出现了一次。下面错误代码看不懂哪里出错,直接闪退了.
!>11:08:24 AutoIt3.exe 结束.rc:-1073741819
+>11:08:24 AccAu3Wrapper 完成.
>Exit code: 3221225477    Time: 3151
主要是经常要导拣货单。所以我做好模板直接把数据写到模板就可以直接打印了,新建的话每次都要调整单元格宽度,高度,还有页边距什么的.
 楼主| 发表于 2018-9-24 23:15:45 | 显示全部楼层
主界面
拣货单列表


打开设置好的EXCEL模板,从A2开始写入列表数据,自动选中,自动框线有数值区域,自动排序库位


正常情况下是没问题,就是偶尔会出现错误,数据没写入就直接闪退,控制台回显代码如下
!>11:08:24 AutoIt3.exe 结束.rc:-1073741819
+>11:08:24 AccAu3Wrapper 完成.
>Exit code: 3221225477    Time: 3151

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2018-9-26 18:42:35 | 显示全部楼层
本帖最后由 chzj589 于 2018-9-26 18:45 编辑
121044246 发表于 2018-9-24 23:15
主界面
拣货单列表

试试:
 Local $ListColumnCount = _GUICtrlListView_GetColumnCount($ListView3)
Local $ListRowCount = _GUICtrlListView_GetItemCount($ListView3)
If $ListRowCount <> 0 Then
        Dim $ItemArray[1][$ListColumnCount]
        For $i = 0 To $ListRowCount - 1
                $aItem = _GUICtrlListView_GetItemTextString($ListView3, $i)
                _ArrayAdd($ItemArray, $aItem, 0)
        Next
        _ArrayDelete($ItemArray, 0)
        Local $oExcel = _Excel_Open()
        Local $sWorkbook = @ScriptDir & "\拣货单.xlsx";GUICtrlRead($CA_Inputb29);@ScriptDir & "\Book13.xlsx";"\.xls"
        Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
        $oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook.application.transpose($ItemArray)
        $oWorkbook.activesheet.Range("A1:F" & $ListRowCount + 1).Select ;选中区域
        $oWorkbook.activesheet.range("A1:F" & $ListRowCount).borders.linestyle = 1 ;设置边框
EndIf
_Excel_Close($oExcel)
If @error Then Exit MsgBox(0, "Excel UDF: _Excel_Close 示例 2", "关闭 Excel 应用时出错." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Sleep(2000)
$aProcesses = ProcessList("Excel.exe")
;MsgBox(0, "Excel UDF: _Excel_Close 示例 2", "函数成功结束." & @CRLF & @CRLF & $aProcesses[0][0] & " Excel 实例仍在运行.")



 楼主| 发表于 2018-9-27 01:00:19 | 显示全部楼层

现在有时候也会出现
$oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook.application.transpose($ItemArray)
$oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook^ ??
->00:57:13 AutoIt3.exe 执行脚本结束. 退出码: 1
+>00:57:13 AutoIt3Wrapper 完成脚本处理.
 楼主| 发表于 2018-9-27 01:02:49 | 显示全部楼层

会不会因为x64系统编译x86应用的问题?
发表于 2018-9-27 09:03:49 | 显示全部楼层
121044246 发表于 2018-9-27 01:02
会不会因为x64系统编译x86应用的问题?

导出的列数与Excel表格的列数是否一样?
发表于 2018-9-27 16:17:25 | 显示全部楼层
chzj589 发表于 2018-9-27 09:03
导出的列数与Excel表格的列数是否一样?

刚才试了一下,不行。
闪了一下就退出。
用GUICtrlCreateListView数据导入HTML表格试试
http://www.autoit3.cn/thread-34459-1-1.html
 楼主| 发表于 2018-9-29 00:31:25 | 显示全部楼层
chzj589 发表于 2018-9-27 16:17
刚才试了一下,不行。
闪了一下就退出。
用GUICtrlCreateListView数据导入HTML表格试试

好的,我先收藏了.
这几天忙没空.等过几天有空了再研究一下.谢谢了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 13:17 , Processed in 0.092022 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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