EXCEL的操作??
任务描述:
1、打开一个已经存在的EXCEL文件;
2、找到一个确定名称的工作表(这文件里有几个表,要操作的表不一定是当前表),设成当前表;
3、在已有内容的最后一行下面增加数据,数据格式为:
第一格为文本,第二行为超链接,链接到另一个文件,第三行为日期,其它均为文本;
4、保存并关闭。
555555555,对EXCEL操作不懂,却碰上这样的任务,大家帮忙,先谢了
问题点数:200、回复次数:21Top
1 楼j9dai(翔)(DoItNow)回复于 2005-12-10 10:22:00 得分 50
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199669Top
2 楼j9dai(翔)(DoItNow)回复于 2005-12-10 10:23:08 得分 0
呵呵,你自己审核的FAQ哦Top
3 楼xiongxiao(小雄)回复于 2005-12-10 10:31:32 得分 0
不是吧,我自己审的,晕啊,我哪年审的???Top
4 楼xiongxiao(小雄)回复于 2005-12-10 10:34:07 得分 0
不对啊,没有几条是能对上上面的任务的,5555555555555555Top
5 楼xiongxiao(小雄)回复于 2005-12-10 10:42:58 得分 0
录制了一段宏,改成PB语句应该是啥??
Range("A2").Select
ActiveCell.FormulaR1C1 = "05-237"
Range("B2").Select
ActiveCell.FormulaR1C1 = "05-237"
Range("B2").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
"F:\My Documents\0921.xls", TextToDisplay:="05-237"
Range("C2").Select
ActiveCell.FormulaR1C1 = "2/2/2006"
Range("C2").Select
Selection.NumberFormatLocal = "m""月""d""日"";@"
Range("D2").Select
ActiveCell.FormulaR1C1 = "456"
还有如何查找一个表中最后一行是多少的语句是啥??Top
6 楼lzheng2001(1加1)回复于 2005-12-10 11:12:26 得分 20
excel帮助文件有详细的编程参考资料,你的问题都可以在帮助文件中找到,我相信楼主能自己解决的.Top
7 楼xiongxiao(小雄)回复于 2005-12-10 11:47:38 得分 0
楼上的1+1老弟,真是汗颜呀,只在帮助中找到下面这个:
本示例显示当前工作表打印区域中的行数和列数。
p = Names("Print_Area").RefersToRange.Value
MsgBox "Print_Area: " & UBound(p, 1) & " rows, " & _
UBound(p, 2) & " columns"
可惜偶不明白,这一个方法在没有设置打印区域的时候,应该是可以的,但不会用Top
8 楼lzp_lrp(lzp)回复于 2005-12-10 12:33:05 得分 10
呵呵,帮你顶吧Top
9 楼lzheng2001(1加1)回复于 2005-12-10 14:26:43 得分 0
编程参考手册都在帮助文件上了,你找不出来吗? 不同的版本有点不同,总之你找一下吧,所有对象,属性都在内面.Top
10 楼Helloworld2004()回复于 2005-12-10 14:42:19 得分 10
除非必要,不建议用pb来访问excel,两者的兼容性并不好,而且以后程序的维护也是个大问题。建议这部分程序用支持com的程序编写,例如vb,vc,或者用vba来写都好一些。用pb来操作excel并不是不可能,但实际上,由于excel的版本很多,以及调用方式的问题,很难写出高质量的程序出来。Top
11 楼xiongxiao(小雄)回复于 2005-12-10 14:55:39 得分 0
唉,我要完成的就是从数据窗口中读出数据来然后写入EXCEL文件中,EXCEL的版本最低是2000,这个可以保证,1+1老弟说的帮助文件太大了,还不知用什么关键字去找,真是痛苦Top
12 楼xiongxiao(小雄)回复于 2005-12-12 13:26:55 得分 0
找不出结果,帮忙呀,大小虾们
自己顶Top
13 楼huodian007(火点)回复于 2005-12-12 20:57:40 得分 20
PB与excel通讯
如何从*.xls 文件中导入数据到数据窗口?
public function boolean wf_appendfromxls (datawindow dw_acton, string str_filename);
OLEObject ExcelServer
long excelok
string str_savename
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
if excelok < 0 then
messagebox("连接excel失败,检查你的系统是否安装了office",string(excelok))
return false
else
ExcelServer.Workbooks.Open(str_filename)
str_savename="c:\temp.txt"
excelserver.activeworkbook.saveas(str_savename,3)
excelserver.displayalerts=false
ExcelServer.quit()
ExcelServer.DisconnectObject()
DESTROY ExcelServer
dw_acton.ImportFile(str_savename)
filedelete(str_savename)
return true
end if
end function
/*///////////////////////////////////////////////////////////////////////////
//支持导出分组带、合计带,并且支持多层嵌套报表导出,基本是所见及所得
//函数名称:gf_dwtoexcel
//参数:ad_dw:datawindow
//返回值true/false:boolean
//王卫
//2004-01-14
/////////////////////////////////////////////////////////////////////////////
*/
SetPointer(HourGlass!)
long i, j, li_pos
string ls_objects, ls_obj, ls_text, ls_err, ls_sql
datastore lds_saveas//导出数据窗
datastore lds_sort//获得根据 object.x 排序的 (band = detail and visible = 1) 的 column/compute
boolean lb_return//返回值
string ls_pbver//pb 版本信息
environment env//环境变量
int li_value
string ls_path,ls_fname
li_value = GetFilesaveName("请选择导出的文件", &
+ ls_path, ls_fname, "TXT", &
+ "Excel文件(*.XLS),*.xls," &
+ "文本文件 (*.TXT),*.txt," &
)
IF li_value <> 1 THEN
messagebox("提示!","请选择要导出的文件名称")
return false
end if
getenvironment(env)
ls_pbver = string(env.pbmajorrevision)
//创建排序列 datastore
lds_sort = create datastore
ls_sql = 'column=(type=char(1) name = ztext dbname="ztext" )' + '~r~n' + &
'column=(type=char(1) name = zcol dbname="zcol" )' + '~r~n' + &
'column=(type=long name = zx dbname="zx" )' + '~r~n'
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_sort.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if
//准备数据====================================================
//all controls
ls_objects = ad_dw.Describe("datawindow.objects")
//按~t位置作判断开始循环
do while (pos(ls_objects,"~t") > 0)
li_pos = pos(ls_objects,"~t")
ls_obj = left(ls_objects,li_pos - 1)
ls_objects = right(ls_objects,len(ls_objects) - li_pos)
//(column or compute ) at detail and visible
IF (ad_dw.Describe(ls_obj+".type") = "column" or &
ad_dw.Describe(ls_obj+".type") = "compute" ) AND &
(ad_dw.Describe(ls_obj+".band") = "detail" ) AND &
(ad_dw.Describe(ls_obj+".visible") = "1" ) THEN
ls_text = ad_dw.describe(ls_obj + '_t.text')
if ls_text <> '!' and ls_text <> '?' then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)
lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)
lds_sort.setitem(lds_sort.rowcount(), 'zx', long(ad_dw.describe(ls_obj + '.x')))
end if
END IF
loop
//the last control
ls_obj = ls_objects
IF (ad_dw.Describe(ls_obj+".type") = "column" or &
ad_dw.Describe(ls_obj+".type") = "compute" ) AND &
(ad_dw.Describe(ls_obj+".band") = "detail" ) AND &
(ad_dw.Describe(ls_obj+".visible") = "1" ) THEN
ls_text = ad_dw.describe(ls_obj + '_t.text')
if ls_text <> '!' and ls_text <> '?' then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)
lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)
lds_sort.setitem(lds_sort.rowcount(), 'zx', long(ad_dw.describe(ls_obj + '.x')))
end if
END IF
//如果没有列则跳出
if lds_sort.rowcount() < 1 then goto lab1
//根据 object.x 排序
lds_sort.setsort('zx A')
lds_sort.sort()
//创建导出 datastore
lds_saveas = create datastore
ls_sql = ''
for i = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(i, 'zcol')
ls_sql += 'column=(type=char(1) dbname="' + ls_obj + '" )' + '~r~n'
next
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_saveas.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if
//向 lds_saveas 中写数据
for i = 1 to ad_dw.rowcount()
yield()//释放消息队列, 如果数据量较大, 可以使用这个函数
lds_saveas.insertrow(0)
for j = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(j, 'zcol')
if ad_dw.describe(ls_obj + '.type') = 'column' then
ls_text = ad_dw.describe('evaluate(~'LookUpDisplay(' + ls_obj + ')~', ' + string(i) + ')')
else
ls_text = ad_dw.describe('evaluate(~'' + ls_obj + '~',' + string(i) + ')')
end if
lds_saveas.setitem(i, j, ls_text)
next
next
lds_saveas.insertrow(1)
for i = 1 to lds_sort.rowcount()
lds_saveas.setitem(1, i, lds_sort.getitemstring(i, 'ztext'))
next
//准备数据完毕====================================================
//saveas datawindow
lb_return = (lds_saveas.saveas(ls_path, excel!, false) = 1)
lab1:
destroy lds_sort
destroy lds_saveas
SetPointer(Arrow!)
if lb_return then
messagebox("提示!","导出文件成功")
else
messagebox("提示!","导出文件失败")
end if
return lb_return
Top
14 楼xiongxiao(小雄)回复于 2005-12-14 14:14:13 得分 0
楼上兄弟,这不合要求啊
1、打开一个已经存在的EXCEL文件;
2、找到一个确定名称的工作表(这文件里有几个表,要操作的表不一定是当前表),设成当前表;
3、在已有内容的最后一行下面增加数据,数据格式为:
第一格为文本,第二行为超链接,链接到另一个文件,第三行为日期,其它均为文本;
4、保存并关闭。
现在1,2,4点没问题,关键在第三点,找不到资料,头大啊Top
15 楼xiongxiao(小雄)回复于 2005-12-17 11:33:06 得分 0
UPTop
16 楼xiongxiao(小雄)回复于 2005-12-19 09:48:43 得分 0
再次UP,没人回答就结贴Top
17 楼wu_07(一只狗不孤单,想一只狗才孤单)回复于 2005-12-19 10:09:09 得分 80
用户使用区域的最后一行的行数:
Worksheets(SStr).UsedRange.Row + Worksheets(SStr).UsedRange.Rows.Count - 1Top
18 楼pmz()回复于 2005-12-19 11:54:08 得分 10
http://www.pdriver.com/bbs5/dispbbs.asp?BoardID=14&replyID=921&id=174&skin=0
Excel2000VBA手册Top
19 楼xiongxiao(小雄)回复于 2005-12-21 15:26:16 得分 0
终于有答案了,呵呵
不过那手册俺看不到Top
20 楼xiongxiao(小雄)回复于 2005-12-21 16:42:29 得分 0
问题解决:————————结贴
OLEObject ExcelServer
long excelok
string str_filename
str_filename = '321.xls'
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
if excelok < 0 then
messagebox("连接excel失败,检查你的系统是否安装了office",string(excelok))
else
long ll_row
string sheet,ls_range
sheet = 'sheet1'
ExcelServer.Workbooks.Open(str_filename)
ExcelServer.Worksheets(sheet).Activate
ExcelServer.visible= true
ll_row = ExcelServer.Worksheets(sheet).UsedRange.Row + ExcelServer.Worksheets(sheet).UsedRange.Rows.Count
ExcelServer.cells(ll_row,1).value = '05-245'
ExcelServer.cells(ll_row,2).value = '05-245'
ExcelServer.cells(ll_row,3).value = '2005-5-25'
ls_range = 'C' + string(ll_row)
ExcelServer.Worksheets(sheet).range(ls_range).NumberFormatLocal = 'm""月""d""日"";@'
ls_range = 'B' + string(ll_row)
ExcelServer.Worksheets(sheet).Hyperlinks.Add(ExcelServer.Worksheets(sheet).range(ls_range),"E:\st\开始.jpg")
excelserver.ActiveWorkbook.save()
excelserver.displayalerts=false
ExcelServer.quit()
ExcelServer.DisconnectObject()
DESTROY ExcelServer
end ifTop
21 楼sdhylj(青锋-SS)(献血有益健康(别人的))回复于 2005-12-21 17:13:38 得分 0
upTop




