VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

一個DBF內,轉成不同的SHEETS

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
b7421200



註冊時間: 2007-08-07
文章: 15


第 1 樓

發表發表於: 星期四 六月 12, 2008 7:52 pm    文章主題: 一個DBF內,轉成不同的SHEETS 引言回覆

我已經在這裡、紅狐、程式設計俱樂部…都爬過了。
也找了EXCEL VBA了,還是試不出來… Crying or Very sad

我的目的:
在一個DBF(ALL.BDF)內,有許多的資料,像是:

A B C D
L555 5 6 7
L555 8 9 8
L666 4 4 3
L666 3 3 5

要將A裡面相同(EX.L555)的都匯到一個SHEET(在同一EXCEL檔裡),並重新命名SHEET1 = L555,SHEET2 = L666 ……
所以我用
SELECT DISTINCT A FROM ALL INTO CURSOR N NOFILTER
計算總要增加幾個SHEET; 我已經試出來,可以增加SHEET及重新命名了!

可是在選到要填入資料時,都會出錯,會出現:
* OLE error code 0*8002000b:Invalid index.

我的程式如下:

EXCEL = CREATEOBJECT('EXCEL.APPLICATION')
IF TYPE('EXCEL') = 'U'
WAIT WINDOW "啟動失敗!"
RETURN
ENDIF

EXCEL.WORKBOOKS.ADD
REPORTTITLE = "總表"
EXCEL.CAPTION = REPORTTITLE
EXCEL.VISIBLE = .T.

SELECT N
go top
a = reccount()
b = a-3
c= 1
do while !eof() and b => c
if a <> b
excel.sheets.add
else
loop
endif
c = c + 1
enddo

select n
for i = 1 to a
select n
go i
excel.worksheets("sheet" + alltrim(str(i))).name = alltrim((n.centername))
endfor

SELECT N
GO TOP
DO WHILE !EOF()
lcenter = alltrim(n.A)
lcenter = '"&lcenter"'
SELECT *FROM ALL WHERE ALL.A = N.A INTO CURSOR FOOU NOFILTER

SELECT FOOU
GO TOP
SCAN FOR RECNO() >= 1
for list = 1 to fcount()
fld = field(list)
excel.worksheets(lcenter).cells(recno()+1,list).value = &fld
endfor
ENDSCAN

SKIP

ENDDO

EXCEL.ACTIVEWORKBOOK.SAVEAS('D:\ALL.XLS')

PS.是紅色那行出錯。
回頂端
檢視會員個人資料 發送私人訊息
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 2 樓

發表發表於: 星期五 六月 13, 2008 8:51 am    文章主題: 引言回覆

出錯時,
lcenter 值是多少
recno()值是多少
&fld的值又是多少?
你可以先抓出來嗎?

_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
b7421200



註冊時間: 2007-08-07
文章: 15


第 3 樓

發表發表於: 星期五 六月 13, 2008 9:25 am    文章主題: 引言回覆

nelsonchuang 寫到:
出錯時,
lcenter 值是多少
recno()值是多少
&fld的值又是多少?
你可以先抓出來嗎?


有,我有試過;
如果我不用變數放進去
而直接用=> "L555" 的話是可以跑的出來的

用變數的話:
lcenter = "L555"
recno() :因為我select 出來的foou ,筆數要大於等於1時才會動
這應該不會有太大的問題。
&fld:裡面的值都是有的;
回頂端
檢視會員個人資料 發送私人訊息
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 4 樓

發表發表於: 星期五 六月 13, 2008 9:50 am    文章主題: 引言回覆

=.=|| 我是問...出錯當時,這些值是多少?你有追蹤嗎?
_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
b7421200



註冊時間: 2007-08-07
文章: 15


第 5 樓

發表發表於: 星期五 六月 13, 2008 10:03 am    文章主題: 引言回覆

nelsonchuang 寫到:
=.=|| 我是問...出錯當時,這些值是多少?你有追蹤嗎?


抱歉抱歉!
lcenter 值是多少 :"L555"
recno()值是多少 :FOOU.第一筆的時候
&fld的值是多少 :L555080401

---------------------------------------------------------

我一直在想是不是不能用lcenter來替代 "l555" 呢?
不然都是【OLE error code 0*8002000b:Invalid index.】出錯…
回頂端
檢視會員個人資料 發送私人訊息
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 6 樓

發表發表於: 星期五 六月 13, 2008 10:34 am    文章主題: 引言回覆

你的

lcenter = alltrim(n.A)
lcenter = '"&lcenter"'
你確定lcenter="l555"?
我測了一下
lcenter="L555"
excel.worksheets(LCENTER) 是object
你在紅色那一行前面,先加一行susp
然後去debug 的地方輸入
excel.worksheets(lcenter) 看是不是物件
excel.worksheets(lcenter).cells(recno()+1,list)看是不是錯誤
先把這個澄清,問題會快一點解決

_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
b7421200



註冊時間: 2007-08-07
文章: 15


第 7 樓

發表發表於: 星期五 六月 13, 2008 11:40 am    文章主題: 引言回覆

nelsonchuang 寫到:
你的

lcenter = alltrim(n.A)
lcenter = '"&lcenter"'
你確定lcenter="l555"?
我測了一下
lcenter="L555"
excel.worksheets(LCENTER) 是object
你在紅色那一行前面,先加一行susp
然後去debug 的地方輸入
excel.worksheets(lcenter) 看是不是物件
excel.worksheets(lcenter).cells(recno()+1,list)看是不是錯誤
先把這個澄清,問題會快一點解決



試了一下,出現如下:

嗯,是那個名字出錯,居然有兩個””的…
lcenter 是字元的。

改成即可:
lcenter = alltrim(n.centername)
lcenter = ALLTRIM('&lcenter')

謝謝nelsonchuang的幫助,我試出來了,感謝你!太感謝你了! Razz

另外想請教,foxpro的debugger器怎麼用啊?
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作