121044246 发表于 2018-9-22 17:22:00

求助AU3如何对EXCEL某列进行升序排序

比如我要升序排序F列,代码该怎么写

lpxx 发表于 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 = ["Id","Sort","Sort1","money","Sort3"]
Local $array_2 = ["0001","afan","pusofalse","123435","netegg"]
Local $array_3 = ["0002","haijie1223","lynfr8","98764","Maths"]
Local $array_4 = ["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)



是这意思吧?

121044246 发表于 2018-9-23 00:01:05

lpxx 发表于 2018-9-22 23:30
是这意思吧?

谢谢老师,就是这个意思。还有个问题想请教一下。有时候从listview控件读取所有值写入excel会崩溃。需要设置错误返回还是?我把代码贴上Local $ListColumnCount = _GUICtrlListView_GetColumnCount($ListView3)
        Local $ListRowCount = _GUICtrlListView_GetItemCount($ListView3)
        If $ListRowCount <> 0 Then
                Dim $ItemArray[$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

chzj589 发表于 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[$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

121044246 发表于 2018-9-24 22:59:58

本帖最后由 121044246 于 2018-9-24 23:07 编辑

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

121044246 发表于 2018-9-24 23:15:45

主界面
拣货单列表


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


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

chzj589 发表于 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[$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 & " Excel 实例仍在运行.")



121044246 发表于 2018-9-27 01:00:19

chzj589 发表于 2018-9-26 18:42
试试:

现在有时候也会出现$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 完成脚本处理.

121044246 发表于 2018-9-27 01:02:49

chzj589 发表于 2018-9-26 18:42
试试:

会不会因为x64系统编译x86应用的问题?

chzj589 发表于 2018-9-27 09:03:49

121044246 发表于 2018-9-27 01:02
会不会因为x64系统编译x86应用的问题?

导出的列数与Excel表格的列数是否一样?

chzj589 发表于 2018-9-27 16:17:25

chzj589 发表于 2018-9-27 09:03
导出的列数与Excel表格的列数是否一样?

刚才试了一下,不行。
闪了一下就退出。
用GUICtrlCreateListView数据导入HTML表格试试
http://www.autoit3.cn/thread-34459-1-1.html

121044246 发表于 2018-9-29 00:31:25

chzj589 发表于 2018-9-27 16:17
刚才试了一下,不行。
闪了一下就退出。
用GUICtrlCreateListView数据导入HTML表格试试


好的,我先收藏了.
这几天忙没空.等过几天有空了再研究一下.谢谢了
页: [1]
查看完整版本: 求助AU3如何对EXCEL某列进行升序排序