請教各位老師: vfp調用 excel 繁簡轉換問題,謝謝!!

操作環境: 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

感謝歇歇老師指導!!

我也需要,能提供一下你的全码吗?