找回密码
 加入
搜索
查看: 6031|回复: 12

[AU3基础] 求助:excel删除一行的问题.........已解决

  [复制链接]
发表于 2013-10-26 20:54:38 | 显示全部楼层 |阅读模式
本帖最后由 jiaosc 于 2013-10-27 12:16 编辑

下列语句想要删除excel第九行数据,程序没有报错,但这一行数据没有删掉,请老师们看看问题出在哪里?怎样才能可靠地进行行删除操作?谢谢!
Global $q="9"
$oExcelA = _ExcelBookOpen(D:\aaa.xls)
With $oExcelA       
$range=$q&":"&$q       
.Range($range).Select       
.oExcel.ActiveSheet.Rows($q).Delete
EndWith
发表于 2013-10-26 21:14:20 | 显示全部楼层
估计
$oExcelA.rows(9).delete
就行了,你是不是费太多事了
 楼主| 发表于 2013-10-26 23:15:07 | 显示全部楼层
本帖最后由 jiaosc 于 2013-10-26 23:20 编辑
估计
$oExcelA.rows(9).delete
就行了,你是不是费太多事了
kevinch 发表于 2013-10-26 21:14


kevinch老师:直接$oExcelA.rows(9).delete也是不行啊删不掉啊,不过我的这个第九行是一个变量,它是查找到一个特定字符后返回的行号,不是固定的。
发表于 2013-10-27 07:03:58 | 显示全部楼层
其实excel的udf有一个挺让人迷惑的地方,你有些时候很难确定返回的$oExcel对象是excel进程还是当前打开的工作簿,再试一下
$oExcelA.activesheet.rows(9).delete
 楼主| 发表于 2013-10-27 08:16:12 | 显示全部楼层
试过了用$oExcelA.activesheet.rows(9).delete还是删不掉,另外我录制了一个删除一行的宏,但宏常数部分不知如何转换,望老师赐教。
   Rows("5:5").Select
    Selection.Delete Shift:=xlUp
转换成
With $oExcelA
. Rows("5:5").Select
.Selection.Delete Shift:=xlUp
EndWith
第二句最后的宏常量Shift:=xlUp显示为黑色字体,怎么处理?请教。
发表于 2013-10-27 08:39:54 | 显示全部楼层
$excel=ObjCreate("excel.application")
$excel.visible=True
$wb=$excel.workbooks.add
With $wb.activesheet
        .range("a1:a10").formula="=row()"
        .range("a1:a10").value=.range("a1:a10").value
        MsgBox(0,"","确定后删除第9行")
        .rows(9).delete
EndWith
MsgBox(0,"","对了没?")
$wb.close(false)
$excel.quit
你用这个测试

另外那个xlUp你可以不用理会,删除一整行后下面的行肯定会上移的,根本无需指定移动方向,只有删除某一个单元格或非整行整列的区域时才根据需要指定其他单元格移动方向
 楼主| 发表于 2013-10-27 08:59:36 | 显示全部楼层
.range("a1:a10").formula="=row()"
.range("a1:a10").value=.range("a1:a10").value

这两句没看懂,望解释一下为盼!目的只为学习,日后以便举一反三。
发表于 2013-10-27 09:19:20 | 显示全部楼层
a1:a10先写入公式得到行号,再将公式转化为值,一种偷懒的写序号方式
发表于 2013-10-27 11:13:50 | 显示全部楼层
$oExcelA.activesheet.rows(9).delete
 楼主| 发表于 2013-10-27 11:31:18 | 显示全部楼层
ok了!麻烦老师看看我对以上代码理解对不对,另外为什么先写入公式得到行号用a1:a10呢?如果想要删除的行数远远大于a10的范围如5000行,还是这么写吗?
$oExcelA=ObjCreate("excel.application");通过一个指定的类名引用一个 COM 对象.
$oExcelA.visible=True;$oExcelA工作表显示为真
$wb=_ExcelBookOpen("D:\autoit3\autoit3\SciTe\aaa.xls");打开一个存在的工作表并返回它的对象标识.
;$wb=$oExcelA.workbooks.add
With $wb.activesheet ;激活所返回对象标识工作表.
        .range("a1:a10").formula="=row()";a1:a10先写入公式得到行号
        .range("a1:a10").value=.range("a1:a10").value;将公式转化为值
         MsgBox(0,"","确定后删除第16行")
        .rows(16).delete;删除16行
EndWith
MsgBox(0,"","对了没?,OK了!")
$wb.close(false);关闭一个存在的对象标识为$wb的工作表
$oExcelA.quit ;退出通过一个指定的类名引用一个 COM 对象.
发表于 2013-10-27 11:50:42 | 显示全部楼层
本帖最后由 kevinch 于 2013-10-27 11:55 编辑

$oExcelA=ObjCreate("excel.application");通过一个指定的类名创建一个 COM 对象.
$oExcelA.visible=True;$oExcelA程序界面显示为真
$wb=$oExcelA.workbooks.open("D:\autoit3\autoit3\SciTe\aaa.xls");打开一个存在的工作簿并返回它的对象标识.
With $wb.activesheet  ;当前工作于$wb所引用的工作簿的活动工作表
        .range("a1:a5000").formula="=row()"  ;a1:a10先写入公式得到行号
     .range("a1:a5000").value=.range("a1:a5000").value  ;将公式转化为值
     MsgBox(0,"","确定后删除第1116行")
        .rows(1116).delete  ;删除1116行
EndWith
MsgBox(0,"","对了没?,OK了!")
$wb.close(false);关闭$wb所引用的工作簿并且不保存修改(需要保存修改的话用true)
$oExcelA.quit ;退出通过一个指定的类名引用一个 COM 对象.

明确一点:
一个excel文件是一个工作簿,工作簿里的每一个单页是一个工作表,从大到小的引用层级是:进程(application)->工作簿(workbook)->工作表(worksheet)->单元格区域(range)
 楼主| 发表于 2013-10-27 12:11:14 | 显示全部楼层
明白了,谢谢kevinch老师不厌其烦的耐心指导,说句心里话,我接触AU3不长,但在这个论坛中通过诸位老师们的耐心细致的指导,确确实实学到了不少东西,自己感觉长进了不少,再次谢谢老师们,谢谢!
发表于 2015-1-6 14:37:18 | 显示全部楼层
哈哈,学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 12:21 , Processed in 0.108191 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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