操作環境: win10, vfp9.0, excel2003, excel2010
Vfp代码,将word文檔繁转简成功,但用在Excel文檔时出错,请求高手指点,谢谢!!
*代碼如下:
clear
set safe off
*设定对象
oExcel=CreateObject('Excel.Application') &&
oExcel.DisplayAlerts=.t. &&
* 打开对象
oExcel.Workbooks.Open('D:\518D\xls\Temp.xlsx') &&
oExcel.Worksheets("sheet1").Activate &&激活表
oExcel.Visible=.F.
*word繁转简,简轉繁都成功
* oWord.WordBasic.ToolsTCSCTranslate(0,0,0) && 繁转简 正确
* oWord.WordBasic.ToolsSCTCTranslate(0,0,0) && 简轉繁 正確
*excel 繁转简 出錯 (整份工作表繁转简)
oExcel.ExcelBasic.ToolsTCSCTranslate(0,0,0) && 此行代码出错2021-01-04
*简轉繁 出錯
oExcel.ExcelBasic.ToolsSCTCTranslate(0,0,0) &&此行代码出错2021-01-04
oExcel.DisplayAlerts=.f. &&
* oExcel.save
oExcel.ActiveWorkbook.Save
oExcel.Workbooks.Close
oexcel.quit
RELEASE oexcel
set safe on
RETURN
对不起,我的错
oWord=Createobject("Word.Application")
oWord.Documents.Add()
nExcelRows=oExcel.ActiveSheet.UsedRange.Rows.Count
nExcelCols=oExcel.ActiveSheet.UsedRange.Columns.Count
for i=1 to nExcelRows
for j=1 to nExcelCols
LcTempValue=oExcel.cells(i,j).value
if vartype(LcTempValue)="C"
oWord.ActiveDocument.Range.Text=LcTempValue
oWord.WordBasic.ToolsSCTCTranslate(0,0,0)
oExcel.cells(i,j).value=oWord.ActiveDocument.Range.Text
endif
endfor
endfor
需要调用Word的转换方法
nExcelRows=oExcel.ActiveSheet.UsedRange.Rows.Count
nExcelCols=oExcel.ActiveSheet.UsedRange.Columns.Count
for i=1 to nExcelRows
for j=1 to nExcelCols
LcTempValue=oExcel.cells(i,j).value
if vartype(LcTempValue)="C"
oWord.Sections(1).Range.Text =LcTempValue
oWord.WordBasic.ToolsSCTCTranslate(0,0,0)
oExcel.cells(i,j).value=oWord.Sections(1).Range.Text
endif
endfor
endfor
謝謝,我試試看
不行,出錯
請幫忙再看看,可有解決辦法,謝謝!!
mzvfp,好的,我去看看,謝謝!
对不起,我的错
oWord=Createobject("Word.Application")
oWord.Documents.Add()
nExcelRows=oExcel.ActiveSheet.UsedRange.Rows.Count
nExcelCols=oExcel.ActiveSheet.UsedRange.Columns.Count
for i=1 to nExcelRows
for j=1 to nExcelCols
LcTempValue=oExcel.cells(i,j).value
if vartype(LcTempValue)="C"
oWord.Sections(1).Range.Text =LcTempValue
oWord.WordBasic.ToolsSCTCTranslate(0,0,0)
oExcel.cells(i,j).value=oWord.Sections(1).Range.Text
endif
endfor
endfor
再试试。
好的,謝謝
抱歉,老師,還是會出錯
我再試試,謝謝指導!
是台湾企业?
對的
老師,您好,能用了,不過有點慢
文檔約1000行,但轉了約2分鐘,
有沒辦法,象EXCEL本身的繁簡按鈕般快捷??(有點貪心了,不好意思!!)
https://github.com/RelaxTools/RelaxTools-Addin
需要的是能在VFP程序用的代碼,還是採用 歇歇老師的代碼了,
請歇歇老師再指導一下,能否將for i, for j這二個變量反射到表單界面上,這樣可以看到繁簡轉換时的進度? 再次感謝!!
請歇歇老師再指導一下,能否將for i, for j這二個變量反射到表單界面上,這樣可以看到繁簡轉換时的進度? 再次感謝!!
这个可以的,但是进度条会拖慢速度。
oWord=Createobject("Word.Application")
oWord.Documents.Add()
nExcelRows=oExcel.ActiveSheet.UsedRange.Rows.Count
nExcelCols=oExcel.ActiveSheet.UsedRange.Columns.Count
for i=1 to nExcelRows
pas=INT(i/nExcelRows*20)
bfb=i/nExcelRows*100
waitstr="正在处理 "+ALLTRIM(STR(bfb,5,2))+'%'+CHR(10)+CHR(13)+CHR(10)+CHR(13)
MY_INFO=waitstr+REPLICATE("■",pas)+REPLICATE("口",pslen-pas)
WAIT MY_INFO WINDOW NOWAIT noclear AT SYSMETRIC(2)/32,SYSMETRIC(1)/12-12 &&居中性不太好
for j=1 to nExcelCols
LcTempValue=oExcel.cells(i,j).value
if vartype(LcTempValue)="C"
oWord.ActiveDocument.Range.Text=LcTempValue
oWord.WordBasic.ToolsSCTCTranslate(0,0,0)
oExcel.cells(i,j).value=oWord.ActiveDocument.Range.Text
endif
endfor
endfor
oWord=Createobject("Word.Application")
oWord.Documents.Add()
nExcelRows=oExcel.ActiveSheet.UsedRange.Rows.Count
nExcelCols=oExcel.ActiveSheet.UsedRange.Columns.Count
for i=1 to nExcelRows
pas=INT(i/nExcelRows*20)
bfb=i/nExcelRows*100
waitstr="正在处理 "+ALLTRIM(STR(bfb,5,2))+'%'+CHR(10)+CHR(13)+CHR(10)+CHR(13)
MY_INFO=waitstr+REPLICATE("■",pas)+REPLICATE("口",20-pas)
WAIT MY_INFO WINDOW NOWAIT noclear AT SYSMETRIC(2)/32,SYSMETRIC(1)/12-12 &&居中性不太好
for j=1 to nExcelCols
LcTempValue=oExcel.cells(i,j).value
if vartype(LcTempValue)="C"
oWord.ActiveDocument.Range.Text=LcTempValue
oWord.WordBasic.ToolsSCTCTranslate(0,0,0)
oExcel.cells(i,j).value=oWord.ActiveDocument.Range.Text
endif
endfor
endfor
感謝歇歇老師指導!!
我也需要,能提供一下你的全码吗?