jiaosc 发表于 2013-10-26 20:54:38

求助:excel删除一行的问题.........已解决

本帖最后由 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

kevinch 发表于 2013-10-26 21:14:20

估计
$oExcelA.rows(9).delete
就行了,你是不是费太多事了
{:face (197):}

jiaosc 发表于 2013-10-26 23:15:07

本帖最后由 jiaosc 于 2013-10-26 23:20 编辑

估计
$oExcelA.rows(9).delete
就行了,你是不是费太多事了
kevinch 发表于 2013-10-26 21:14 http://www.autoitx.com/images/common/back.gif

kevinch老师:直接$oExcelA.rows(9).delete也是不行啊删不掉啊,不过我的这个第九行是一个变量,它是查找到一个特定字符后返回的行号,不是固定的。

kevinch 发表于 2013-10-27 07:03:58

其实excel的udf有一个挺让人迷惑的地方,你有些时候很难确定返回的$oExcel对象是excel进程还是当前打开的工作簿,再试一下
$oExcelA.activesheet.rows(9).delete

jiaosc 发表于 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显示为黑色字体,怎么处理?请教。

kevinch 发表于 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你可以不用理会,删除一整行后下面的行肯定会上移的,根本无需指定移动方向,只有删除某一个单元格或非整行整列的区域时才根据需要指定其他单元格移动方向

jiaosc 发表于 2013-10-27 08:59:36

.range("a1:a10").formula="=row()"
.range("a1:a10").value=.range("a1:a10").value

这两句没看懂,望解释一下为盼!目的只为学习,日后以便举一反三。

kevinch 发表于 2013-10-27 09:19:20

a1:a10先写入公式得到行号,再将公式转化为值,一种偷懒的写序号方式

zzbtlc 发表于 2013-10-27 11:13:50

$oExcelA.activesheet.rows(9).delete

jiaosc 发表于 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 对象.

kevinch 发表于 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)

jiaosc 发表于 2013-10-27 12:11:14

明白了,谢谢kevinch老师不厌其烦的耐心指导,说句心里话,我接触AU3不长,但在这个论坛中通过诸位老师们的耐心细致的指导,确确实实学到了不少东西,自己感觉长进了不少,再次谢谢老师们,谢谢!

aiwen0092 发表于 2015-1-6 14:37:18

哈哈,学习了
页: [1]
查看完整版本: 求助:excel删除一行的问题.........已解决