找出VBA中的对像,属性,方法,在以下网址中搜索了解其性质
http://www.icodeguru.com/windows/Microsoft-Excel-Object/overview.htm
比如一个Range("A1"),判断是一个对象?或是一个对象的属性?或是一个对象的方法(无外乎这三种)从字面上看应该是一种事
物(对象)
找到其父子关系。我们现有的对象是excel
根据
http://www.icodeguru.com/windows/Microsoft-Excel-Object/html/xlobjRange.htm
中的这句Worksheets("Sheet1").Range("A5").Value = _
Worksheets("Sheet1").Range("A1").Value
了解到Range属于sheet的子对象具有value这个属性,在aardio中写到:
import com;
excel = com.CreateObject("Excel.Application");
var book = excel.Workbooks.Add();
var sheet = book.Worksheets(1);
sheet.Range("a1").value2="这是你想要的。"
Microsoft Excel Visual Basic 参考
这个CHM文件用起来很方便。
限于过大,我没有上传,哪儿能得到它。你懂的。
————————————————————————————————
import
com;
import
com.excel
excel = com.CreateObject(
"Excel.Application"
);
var
book = excel.Workbooks.Add();
var
sheet = book.Worksheets(1);
excel.alerts =
false
excel.Visible =
true
;
excel.Range(
"A1"
).value2=
"EXCEL子对象RANGE的属性值"
excel.Range(
"A3:c3"
).value2=
"EXCEL子对象RANGE的属性值"
excel.Range(
"a5"
).FormulaR1C1 =
"VBA中value为什么在aardio中是value2,而value2与formulaR1C1又有什么不同?值与公式不同?"
//不知道为什么是value2而不是value请高手解惑,谢谢
Value2 属性
请参阅 应用于
示例
特性
返回或设置单元格值。
Variant
类型,可读写。
说明
该属性和
Value
属性的唯一区别在于
Value2
属性不使用
Currency
和
Date
数据类型。通过使用
Double
数据类型,可将用这些数据类型设置格式的数据按浮点数字返回。
示例
本示例使用
Value2
属性对两个单元格的值进行相加。
Range("a1").
Value2
= Range("b1").
Value2
+ Range("c1").
Value2
http://www.icodeguru.com/windows/Microsoft-Excel-Object/
VBA中写到Worksheets("Sheet1").Range("A1:G1"). _
Borders(xlEdgeBottom).Color = RGB(255, 0, 0)
由此可知Borders是Range的子成员,xlEdgeBottom为Borders的索引 color为borders的属性之一
//io.open()
//com.DumpTypeInfo(excel)
import
gdi
//实用哪个库中的对像就要先导入哪个库
excel.Range(
"a1"
).Borders.color= gdi.RGB(255,0,0)
excel.Range(
"a3"
).Borders.color= gdi.RGB(0,0,0)
excel.Range(
"a5"
).Borders.color=0xFF0000
excel.Range(
"a7"
).Borders.LineStyle =-4119
excel.Range(
"a9"
).Borders(7).LineStyle =-4119
excel.Range(
"a11"
).Borders(10).LineStyle =-4119
在VBA中边框可以指定其中一个(索引)来设置颜色。aardio中我没能实现。不解
Worksheets("Sheet1").Range("A1:G1"). _
Borders(xlEdgeBottom).Color = RGB(255, 0, 0)
//创建了excel模型为什么还要导入 excel库?
/*为什么在aardio中一句excel = com.CreateObject("Excel.Application");
aardio就可以拥有EXCEL的资源,使用excel模型,如果XP系统中没有装EXCEL也可以创造它出来并吗?
老大在excel库中写的常数为什么写?有什么用?*/
不懂这是什么表示法,不断的重复失败中偶然搜索到
白色:FFFFFF
红色:FF0000
绿色:00FF00
蓝色:0000FF
洋红:FF00FF
墨绿:00FFFF
黄色:FFFF00
黑色:000000
爱丽丝兰:F0F8FF
碧绿:70DB93
巧克力色:5C3317
import
com.excel
excel = com.CreateObject(
"Excel.Application"
);
var
book = excel.Workbooks.Add();
var
sheet = book.Worksheets(1);
excel.alerts =
false
excel.Visible =
true
;
//使用哪个库中的对像、常量就要先导入哪个库,我要用到GDI库中的颜色常量
import
gdi
excel.cells(1,5).value2=
"颜色值"
excel.cells(1,5).Font.Color = gdi.RGB(128, 0, 0)
excel.cells(5,1).Interior.Color = gdi.RGB(153, 204, 255)
excel.Range(
"A1"
).value2=
"1"
excel.Range(
"A2"
).value2=
"2"
//写入公式
excel.Range(
"A3"
).value2 =
"=Sum(a"
++1++
",a"
++2++
")"
excel.Range(
"B3:C4"
).value2=
"都写这个值"
excel.Range(
"d11"
).value2 =
"区域装饰"
excel.Range(
"d11"
).Borders(9).LineStyle =4
excel.Range(
"d11"
).Borders(10).LineStyle =-4119
//xlEdgeLeft 7 区域左边的边框。
excel.Range(
"d11"
).Borders(7).LineStyle =-4142
excel.Range(
"d11"
).Borders(8).LineStyle =5
excel.Range(
"d11"
).Borders(8).color = gdi.RGB(0,0,255)
excel.Range(
"d11"
).Borders(9).color = gdi.RGB(0,255,0)
excel.Range(
"d11"
).Borders(10).color = gdi.RGB(255,0,0)
excel.Range(
"d11"
).Borders(7).color = gdi.RGB(1,22,255)
excel.Range(
"A3"
).LineStyle = xlContinuous
excel.Range(
"A3"
).Weight = xlThin
excel.Range(
"A3"
).ColorIndex = xlAutomatic
excel.Range(
"A3"
).Font.Name =
"宋体"
excel.Range(
"A3"
).Font.Size = 20
excel.Range(
"A3"
).Font.color = 7
excel.Range(
"A3"
).Font.Strikethrough = False
excel.Range(
"A3"
).Font.Superscript = False
excel.Range(
"A3"
).Font.Subscript = False
excel.Range(
"A3"
).Font.OutlineFont = False
excel.Range(
"A3"
).Font.Shadow = False
excel.Range(
"A3"
).Font.Underline =-4119
/*xlUnderlineStyleNone*/
excel.Range(
"A3"
).Font.ColorIndex = xlAutomatic
excel.Range(
"A3"
).Font.Color = gdi.RGB(128, 0, 0)
//______________________________________________________
//带注释的VBA例子也有助于理解
//http://blog.sina.com.cn/s/blog_685ff0dc0100rmx7.html
http://apps.hi.baidu.com/share/detail/6506886
常量値excel库中也有
xlUndercolorDouble -4119
xlUndercolorDoubleAccounting 5
xlUndercolorNone -4142
xlUndercolorSingle 2
xlUndercolorSingleAccounting 4
XlBordersIndex 枚举
指定要检索的边框。
名称 值 描述
xlDiagonalDown 5 从区域中每个单元格的左上角至右下角的边框。
xlDiagonalUp 6 从区域中每个单元格的左下角至右上角的边框。
xlEdgeBottom 9 区域底部的边框。
xlEdgeLeft 7 区域左边的边框。
xlEdgeRight 10 区域右边的边框。
xlEdgeTop 8 区域顶部的边框。
xlInsideHorizontal 12 区域中所有单元格的水平边框(区域以外的边框除外)。
xlInsideVertical 11 区域中所有单元格的垂直边框(区域以外的边框除外)。
xlDiagonalDown 斜下
xlDiagonalUp 斜上
xlEdgeBottom 底边框
xlEdgeLeft 左边框
xlEdgeRight 右边框
xlEdgeTop 上边框
xlInsideHorizontal 内部水平边框线
xlInsideVertical 内部垂直边框线
单元格区域加边框只要一句:
Range("a1:f100").Borders.color=1
取消单元格区域的边框也只要一句:
Range("a1:f100").Borders.Linestyle=0
___________________________________________________
//调整字体和列适应,行适应,边框 宏 录制的部分VBA ,大家可以自己录制观察
Sub Macro1()
' Macro1 Macro
' 宏由 微软用户 录制,时间: 2011-8-6
Range("A1").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
import
com.excel
excel = com.CreateObject(
"Excel.Application"
);
var
book = excel.Workbooks.Add();
var
sheet = book.Worksheets(1);
excel.alerts =
false
excel.Visible =
true
;
//通过工作簿样式设置字体,百分比\常规\货币\货币[0]\千位分隔\千位分隔[0]的参数
//在EXCEL中菜单--格式--样式--中的 格式 成员 属性
excel.ActiveWorkbook.styles(
"常规"
).Font.Bold = True
excel.ActiveWorkbook.styles(
"常规"
).Font.size = 15
//自动换行
excel.ActiveWorkbook.styles(
"常规"
).WrapText=
true
sheet.Cells(2,1).value2=
"kk"
sheet.Range(
"g1:g5"
).value2=
"aa"
sheet.Range(
"f1"
).value2=
"测试一下是不是自动换行生效了"
取消注释单独测试。其它操作部分务必注释掉以免干扰
//区域边框示例
excel.Range("b3:e20").borders.LineStyle=1
excel.Range("b3:e20").borders.Weight = 2/*xlThin*/
//上面一句顶下面两句还要多(多区域周围边框)
//excel.Range("b3:e20").borders(11).LineStyle=1
//excel.Range("b3:e20").borders(12).LineStyle=1
excel.Range(
"b3:e20"
).value2=
"3"
excel.Range(
"b3:e20"
).font.Size=200
sleep
(1000)
excel.Range(
"b3:e20"
).font.Size=100
//自动适应列宽行宽 1 在VBA中AutoFit做为一个方法(行为)在aardio中要加上()才可以。
sheet.Cells.EntireColumn.AutoFit()
sheet.Cells.EntireRow.AutoFit()
sleep
(1000)
excel.Range(
"b3:e20"
).font.Size=3
//自动适应列宽行宽 2。
sheet.Cells.Columns.AutoFit()
sheet.Cells.Rows.AutoFit()
//选中单元格
sheet.Range(
"A5"
).Select()
for
(i=1;excel.ActiveWorkbook.styles.count;1){
sheet.Cells(i,1).value2=excel.ActiveWorkbook.styles(i).name
import
com;
//输出com对象成员
dumpObject =
function
(obj,file=
"/dump.txt"
){
//输出重定向
io.stdout.reopen(file,
"w+"
);
//输出COM对象成员
com.DumpTypeInfo(excel.ActiveWorkbook.styles(
"常规"
))
//还原标准输出
io.stdout.reopen(
"CON"
,
"w"
)
str = string.load(
"/dump.txt"
);
return
str;
str = dumpObject(fs);
import
process
process.
execute
(
"/dump.txt"
);
刚来,不知道aardio里有没有with语句,用with会快不少。
with语句示例:
import
com
var
IE = com.CreateObject(
"InternetExplorer.Application.1"
)
with
IE {
Menubar =
false
;
AddressBar =
false
;
ToolBar =
false
;
Top = 200
Left = 200
Width=300
Height=300
FullScreen =
false
;
Resizable =
true
;
Visible =
true
Navigate2(
"http://www.baidu.com"
)
}
使用命名空间也可以,不过命名空间不能用于局部变量( with语句支持任意返回对象的表达式 )
import
com
IE = com.CreateObject(
"InternetExplorer.Application.1"
)
namespace
IE {
Menubar =
false
;
AddressBar =
false
;
ToolBar =
false
;
Top = 200
Left = 200
Width=300
Height=300
FullScreen =
false
;
Resizable =
true
;
Visible =
true
Navigate2(
"http://www.baidu.com"
)
quickerfans 发表于 2011-8-12 10:24
对命名空间还不理解。发现理解它对编程提高很多。希望quicker能赐教浅谈几句。谢谢,
上面语句,如果不放在命名空间里 你要如下面写法才能执行
import
com
//Create an Instance of IE
IE = com.CreateObject(
"InternetExplorer.Application.1"
)
// 创建IE对象
IE.Menubar =
false
;
IE.AddressBar =
false
;
IE.ToolBar =
false
;
IE.Top = 200
IE.Left = 200
IE.Width=300
IE.Height=300
IE.FullScreen =
false
;
IE.Resizable =
true
;
IE.Visible =
true
IE.Navigate2(
"http://www.baidu.com"
)
放在命名空间里,你就可以省略每行都写IE. 是方便也便于归纳 。
本帖最后由 quickerfans 于 2011-8-13 14:24 编辑
qqmmcc 发表于 2011-8-13 13:45
上面语句,如果不放在命名空间里 你要如下面写法才能执行
import com
namespace IE {
这一句声明了IE的命名空间。这些属性,方法,在IE命名空间里就可以直接用了。不再在其前面加上命名空间IE.的前缀。这一个还算好理解。import win
aa1234="123456"
bb="cc"
win.msbox(self["aa"++1234],"aardio"),这个同样属于命名空间的问题,似乎就绕一个弯
//excel to table
http://bbs.aardio.com/
import com;
excel=com.CreateObject("Excel.Application");
excel.Workbooks.open("c:\2.xls");
excel.visible=false;
excel.DisplayAlerts = False;
sheet=excel.workbooks(1).sheets(1);
//sheet.range("a1:f9").value2=5;
//io.open();
//初始行为1,求有几行;
while(sheet.cells(H+1,1).value2!=null){
H+=1;
//初始列为1,求有几列;
while(sheet.cells(1,L+1).value2!=null){
L+=1;
var tabsum={};
//txt=io.open("c:\test.txt","w")
for(j=1;H;1){
//定义一个空表
var tab={};
for(k=1;L;1){
//从每一行的第一列打印到最后一列;
//io.print(sheet.cells(j,k).value2);
//txt.write(tostring(sheet.cells(j,k).value2)+" ");
//把单元格中的数值压入表中,空单元格或为null或为10个空格
if(tostring(sheet.cells(j,k).value2)!=' '){
table.push(tab,tostring(sheet.cells(j,k).value2));
else {
table.push(tab,"null")
//txt.write('\r\n')
//将子表中的数值压入总表中成二维数组
table.push(tabsum,tab);
excel.quit();
//for(i=1;H;1){
io.open();
//变量i从1至表中键值对数量之和 递增为1
for(i=1;#tabsum;1){
//总表 中 子表 键值对 枚举
for(k,v in tabsum[ i ]){
io.print(k,v);
本帖最后由 quickerfans 于 2011-8-31 10:39 编辑
Kevinch 发表于 2011-8-18 12:33
while(sheet.cells(H+1,1).value2!=null){
H+=1;
sheet.cells(1,1).end(-4121).row;
//xlDown=-4121;
/*END属性:返回一个 Range 对象,该对象代表包含源区域的区域尾端的单元格。等同于按键 End+ 向上End+ 向下键、End+ 向左键或 End+ 向右键。Range 对象,只读。*/
//xlToRight=-4161;
sheet.cells(1,1).end(-4161).select()
sleep(1000);
//xlToLeft=-4159;
sheet.cells(1,1).end(-4159).select()
//xlDown=-4121;
sleep(1000)
sheet.cells(1,1).end(-4121).select()
io.open()
io.print(sheet.cells(1,1).end(-4121).row)
io.print(sheet.cells(1,1).end(-4161).column)
这个方法是要简单些,这样封装一个exceltotable的函数用不了几行代码。仍然不连续的单元格不适用
谢谢,又学了些东东。
++++++摘自nvt303空间+++++
//得到使用的行数和列数,包括不连续行,行,
books=excel.workbooks;
excel.workbooks(1).sheets(1).
Activate()
l=excel.ActiveSheet.
UsedRange
.Columns.count
h=excel.ActiveSheet.UsedRange.Rows.Count
io.open()
io.print(h,l)
++++++++++++++++++++
设置某单元格格式为文本
sheet.Range("A1").
NumberFormatLocal
= "@"
设置单元格格式为数值
sheet.Range("A1").NumberFormatLocal = "0.00" //保留小数点后两位
设置单元格格式为时间
sheet.Range("A1").NumberFormatLocal = "h:mm AM/PM"
sheet.Range( "A1").
HorizontalAlignment
=-4108; //水平居中
sheet.Range( "A1").
VerticalAlignment
=-4108; //垂直居中