找回密码  加入

AUTOIT CN

搜索
查看: 320|回复: 11

[效率算法] 求助AU3如何对EXCEL某列进行升序排序

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


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

  18. ; 对文件进行升序排序,而不考虑标题行列标题
  19. Local $nb_colonne = $oExcel.ActiveSheet.UsedRange.Columns.Count ; 计算列的数量
  20. Local $nb_ligne   = $oExcel.ActiveSheet.UsedRange.Rows.Count    ; 计算行数
  21. $oExcel.Range($oExcel.Cells(2,1), $oExcel.Cells($nb_ligne,$nb_colonne)).Sort ($oExcel.Range("D1"),1)


复制代码

是这意思吧?
回复 支持 1 反对 0

使用道具 举报

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

谢谢老师,就是这个意思。还有个问题想请教一下。有时候从listview控件读取所有值写入excel会崩溃。需要设置错误返回还是?我把代码贴上
  1. Local $ListColumnCount = _GUICtrlListView_GetColumnCount($ListView3)
  2.         Local $ListRowCount = _GUICtrlListView_GetItemCount($ListView3)
  3.         If $ListRowCount <> 0 Then
  4.                 Dim $ItemArray[1][$ListColumnCount]
  5.                 For $i = 0 To $ListRowCount - 1
  6.                         $aItem = _GUICtrlListView_GetItemTextString($ListView3, $i)
  7.                         _ArrayAdd($ItemArray, $aItem, 0)
  8.                 Next
  9.                 _ArrayDelete($ItemArray, 0)
  10.                 Local $oAppl = _Excel_Open()
  11.                 Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\拣货单.xlsx")
  12. $oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook.application.transpose($ItemArray)
  13.                         $oWorkbook.activesheet.Range("A1:F" & $ListRowCount + 1).Select ;选中区域
  14.                         $oWorkbook.activesheet.range("A1:F" & $ListRowCount).borders.linestyle = 1 ;设置边框
  15. 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

查看全部评分

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

好的。就是偶尔会出现错误,今天出现了一次。下面错误代码看不懂哪里出错,直接闪退了.
  1. !>11:08:24 AutoIt3.exe 结束.rc:-1073741819
  2. +>11:08:24 AccAu3Wrapper 完成.
  3. >Exit code: 3221225477    Time: 3151
复制代码

主要是经常要导拣货单。所以我做好模板直接把数据写到模板就可以直接打印了,新建的话每次都要调整单元格宽度,高度,还有页边距什么的.
 楼主| 发表于 2018-9-24 23:15:45 | 显示全部楼层
主界面
拣货单列表


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


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


本帖子中包含更多资源

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

x
发表于 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 | 显示全部楼层

现在有时候也会出现
  1. $oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook.application.transpose($ItemArray)
  2. $oWorkbook.activesheet.cells(2, 1).resize($ListRowCount, $ListColumnCount) = $oWorkbook^ ??
  3. ->00:57:13 AutoIt3.exe 执行脚本结束. 退出码: 1
  4. +>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备15028933号-3 )谷歌 百度

GMT+8, 2018-12-17 02:40 , Processed in 0.094276 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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