注册 登录
编程论坛 VFP论坛

如何从“销售明细表.xls”生成“销售统计表.doc”

王咸美 发布于 2025-11-17 10:11, 374 次点击
现有“销售明细表.xls”,我想生成如下图所示的“销售统计表.doc”,销售统计表中的字段名由 销售明细表中的“区域”动态生成,请各位高手赐教,谢谢!
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
25 回复
#2
wengjl2025-11-17 10:45
这个问题不是和 你前面提的 由 开支明细表 动态 生成 统计表 的问题一样的嘛。

王老师你一定教过  举一反三  的成语吧,现在需要你自己反个三了!
#3
王咸美2025-11-17 12:16
谢谢指点!原来都是dbf表文件,现在原始表为excel文件,结果表为word文件。,
#4
wengjl2025-11-17 13:43
只有本站会员才能查看附件,请 登录

提供一个EXCEL的解决方法,供参考!
#5
wengjl2025-11-17 13:44
Sub 销售统计()
    ' 问题来源:https://bbs.bc-cn.net/thread-514582-1-1.html
    '
    ' 时间:2025-11-17
    Sheet2.Select
    Cells.Select
    Selection.ClearContents
    Sheet2.Cells(1, 1).Value = "产品"
    x1 = 2
    Do While Not (IsEmpty(Sheet1.Cells(x1, 3).Value))
      c_qy = Sheet1.Cells(x1, 3).Value
      y2 = 1
      Do While Not (IsEmpty(Sheet2.Cells(1, y2).Value))
        If Sheet2.Cells(1, y2).Value = c_qy Then
          GoTo kk
        End If
        y2 = y2 + 1
      Loop
      Sheet2.Cells(1, y2).Value = c_qy
kk:   x1 = x1 + 1
    Loop
    '******
    x1 = 2
    Do While Not (IsEmpty(Sheet1.Cells(x1, 3).Value))
      c_pm = Sheet1.Cells(x1, 2).Value
      x2 = 2
      Do While Not (IsEmpty(Sheet2.Cells(x2, 1).Value))
        If Sheet2.Cells(x2, 1).Value = c_pm Then
          GoTo kkk
        End If
        x2 = x2 + 1
      Loop
      Sheet2.Cells(x2, 1).Value = c_pm
kkk:   x1 = x1 + 1
    Loop
    '******
    x1 = 2
    Do While Not (IsEmpty(Sheet1.Cells(x1, 3).Value))
      c_pm = Sheet1.Cells(x1, 2).Value
      c_qy = Sheet1.Cells(x1, 3).Value
      n_je = Sheet1.Cells(x1, 5).Value
      x2 = 2
      Do While Not (IsEmpty(Sheet2.Cells(x2, 1).Value))
        If Sheet2.Cells(x2, 1).Value = c_pm Then
          y = 2
          Do While Not (IsEmpty(Sheet2.Cells(1, y).Value))
            If Sheet2.Cells(1, y).Value = c_qy Then
              y2 = y
            End If
            y = y + 1
          Loop
          Sheet2.Cells(x2, y2).Value = n_je + Sheet2.Cells(x2, y2).Value
         
        End If
        x2 = x2 + 1
      Loop
      x1 = x1 + 1
    Loop
End Sub

供复制粘贴用
#6
王咸美2025-11-17 13:56
谢谢!如果用vfp代码如何写?盼指点。
#7
吹水佬2025-11-17 14:57
只有本站会员才能查看附件,请 登录

程序代码:

defPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (defPath)
xls = defPath + "销售明细表.xls"
oe = CREATEOBJECT("Excel.Application")
oe.DisplayAlerts = 0
oe.WorkBooks.Open(xls)
as = oe.ActiveSheet
rs = oe.CountA(as.Range("A:A")) - 1
cs = oe.CountA(as.Range("1:1")) - 1
ar = as.Cells(2,2).Resize(rs,cs).Value
oe.WorkBooks.Close
oe.Quit
CREATE CURSOR tt (产品 C(20), 区域 C(20), 数量 N(4), 金额 N(10,2))
INSERT INTO tt FROM ARRAY ar
SELECT * FROM tt
CLOSE TABLES ALL
CLEAR ALL
RETURN


再参考之前的“开支明细”转一转就OK
#8
王咸美2025-11-17 15:49
谢谢!
#9
kangss2025-11-17 19:18
以下是引用王咸美在2025-11-17 10:11:08的发言:
现有“销售明细表.xls”,我想生成如下图所示的“销售统计表.doc”,销售统计表中的字段名由 销售明细表中的“区域”动态生成,请各位高手赐教,谢谢!


这种表叫做“交叉表”,你可以试试:

https://bbs.bc-cn.net/viewthread.php?tid=514525&page=1#pid2794178

调用方法:

USE mytable
jcbqh(ALIAS(),1,3,4,.T.) && 或者jcbqh('mytable',1,3,4)

参数1:为打开表的alias(),也就是别名,当前在哪个工作区无所谓,指定别名即可。
参数2:为字符字段,也就是竖轴的field(),指当前mytable中的第几个字段。
参数3:为字符字段,也就是横轴的field(),指当前mytable中的第几个字段。
参数4:为数值型或货币型字段,也就是交叉数值区的field(),指当前mytable中的第几个字段。
参数5:为逻辑型,.T. OR .F.,.T.为行列求和。.F.为不求和。

传入参数,自动转换成你想要表,就是X轴Y轴转换

[此贴子已经被作者于2025-11-17 19:22编辑过]

#10
wengjl2025-11-18 10:44
对销售明细表的转换统计,再转换到WORD的代码请王老师补充,好让我学会一些!

       ***************
       * 作用:将EXCEL的销售表内容读入DBF表中再统计
       * 来源:https://bbs.bc-cn.net/thread-514582-1-1.html
       * 时间:2025-11-18      
       ***************
       SET SAFETY off
       SET engi 70
       CLOSE DATABASES
       defPath = ADDBS(JUSTPATH(SYS(16)))  
       SET DEFAULT TO (defPath)
       wjm = defPath + "销售明细表.xls"
       oe = CREATEOBJECT("Excel.Application")
       oe.DisplayAlerts = 0  
       oe.WorkBooks.Open(wjm)
       as = oe.ActiveSheet
       rs = oe.CountA(as.Range("A:A")) - 1  
       cs = oe.CountA(as.Range("1:1"))   
       ar = as.Cells(2,1).Resize(rs,cs).Value  
       oe.WorkBooks.Close  
       oe.Quit   
       CREATE table xs (型号 c(10),产品 C(20), 区域 C(20), 数量 N(4), 金额 N(10,2))
       INSERT INTO xs FROM ARRAY ar  
       *--以上引用吹版的代码
       zfc=[产品,]
       SELECT xs
       SCAN
         qy=ALLTRIM(区域)
         IF !qy$zfc
             zfc=zfc+[00000.00 as ]+qy+[,]  
         ENDIF
         SELECT xs
       ENDSCAN                                   
       c_zdm=zfc+[00000.00 as 合计]
       SELECT &c_zdm. from xs grou by 产品 into table 统计表
       SELECT 统计表
       USE 统计表 alia bmk
       SELECT xs
       GO top
       SCAN
         zd=[bmk.]+ALLTRIM(xs.区域)
         pm=xs.产品
         SELECT bmk
         LOCATE for bmk.产品=pm
         IF FOUND()
           REPLACE &zd. with xs.金额 + EVALUATE(zd)
         ENDIF
         SELECT xs
       ENDSCAN
       SELECT bmk
       GO top
       SCAN
         sn=0
         FOR i=2 to FCOUNT()-1
           sn=sn+EVALUATE(FIELD(i))
         ENDFOR
         REPLACE 合计 with sn   
         SELECT bmk
       ENDSCAN         
       *---
       * 此处请王老师添加 别名(bmk)表的内容 转到 WORD 的代码(我不会)
       *---
       CLOSE DATABASES
       QUIT
#11
王咸美2025-11-18 13:02
下列代码有点长,不知好不好简化,请高手赐教,谢谢!
CLEAR   ALL
CLOSE   ALL
cPath=ADDBS(JUSTPATH(SYS(16)))
SET   DEFAULT   TO   (cPath)
wjm=cPath+"\销售明细表.xls"
FileName=cPath+"\"+"销售统计表.doc"

* 创建Word应用程序对象
oWord = CREATEOBJECT("Word.Application")
oWord.Visible = .T.

* 创建新文档
oDoc = oWord.Documents.Add()

* 添加标题
oWord.Documents(1).range.Text = "销售统计表"
oWord.Documents(1).range.Font.Size = 16
oWord.Documents(1).range.Font.Bold = .T.
oWord.Documents(1).range.Font.Name="宋体"
oWord.Documents(1).range.ParagraphFormat.Alignment = 1

* 连接Excel并读取数据
oExcel = CREATEOBJECT("Excel.Application")
oExcel.Visible = .F.
oWorkbook = oExcel.Workbooks.Open(wjm)
oSheet = oWorkbook.ActiveSheet

* 获取数据范围
nLastRow = oSheet.UsedRange.Rows.Count

* 创建临时表来存储Excel数据
CREATE   CURSOR   temp_data (订单号  C(10), 产品  C(20), 区域  C(10), 数量  N(5), 金额  N(10,2))

* 将Excel数据导入临时表
FOR   i = 2   TO   nLastRow
    lcOrder = ALLTRIM(TRANSFORM(oSheet.Cells(i, 1).Value))
    lcProduct = ALLTRIM(TRANSFORM(oSheet.Cells(i, 2).Value))
    lcArea = ALLTRIM(TRANSFORM(oSheet.Cells(i, 3).Value))
   
    * 获取金额
    lnQty = 0
    lnAmount = 0
   
    * 处理数量
    lcQtyValue = TRANSFORM(oSheet.Cells(i, 4).Value)
    IF   VARTYPE(lcQtyValue) = "C"   AND   !EMPTY(lcQtyValue)
        lnQty = VAL(lcQtyValue)
    ELSE
        lnQty = oSheet.Cells(i, 4).Value
    ENDIF
   
    * 处理金额
    lcAmountValue = TRANSFORM(oSheet.Cells(i, 5).Value)
    IF   VARTYPE(lcAmountValue) = "C"   AND   !EMPTY(lcAmountValue)
        lnAmount = VAL(lcAmountValue)
    ELSE
        lnAmount = oSheet.Cells(i, 5).Value
    ENDIF
   
    INSERT   INTO   temp_data   VALUES (lcOrder, lcProduct, lcArea, lnQty, lnAmount)
ENDFOR

* 获取所有不重复的区域
SELECT   DISTINCT   区域   FROM   temp_data   INTO   CURSOR   cur_areas   ORDER   BY   区域

* 获取所有不重复的产品
SELECT   DISTINCT   产品   FROM   temp_data   INTO   CURSOR   cur_products   ORDER   BY  产品

* 创建Word表格
nRows = RECCOUNT("cur_products") + 2  && 产品行 + 标题行 + 总计行
nCols = RECCOUNT("cur_areas") + 2     && 区域列 + 产品列 + 合计列

oTable = oDoc.Tables.Add(oDoc.Range(oDoc.Range.End-1, oDoc.Range.End-1), nRows, nCols)
oTable.Style = "网格型"

oWord.ActiveDocument.Tables(1).Range.Font.Bold=.F.
oWord.ActiveDocument.Tables(1).Range.Font.size=11
oWord.ActiveDocument.Tables(1).Range.Font.Name="宋体"
oWord.ActiveDocument.Tables(1).Rows(1).Range.Font.Bold=.t.

* 填充表头
oTable.Cell(1, 1).Range.Text = "产品"
SELECT   cur_areas
nCol = 2
SCAN
    oTable.Cell(1, nCol).Range.Text = ALLTRIM(区域)
    nCol = nCol + 1
ENDSCAN
oTable.Cell(1, nCols).Range.Text = "合计"

* 填充产品数据
SELECT   cur_products
nRow = 2
SCAN
    lcProduct = ALLTRIM(产品)
    oTable.Cell(nRow, 1).Range.Text = lcProduct
   
    * 计算每个区域的金额
    SELECT   cur_areas
    nCol = 2
    SCAN
        lcArea = ALLTRIM(区域)
        
        * 使用SQL查询计算金额 - 这是更可靠的方法
        SELECT   SUM(金额)   AS   area_sum   FROM   temp_data ;
        WHERE   ALLTRIM(产品) == lcProduct   AND   ALLTRIM(区域) == lcArea ;
        INTO   CURSOR   temp_area_sum
        
        IF   _TALLY > 0   AND   !ISNULL(temp_area_sum.area_sum)
            oTable.Cell(nRow, nCol).Range.Text = ALLTRIM(STR(temp_area_sum.area_sum, 10, 2))
        ELSE
            oTable.Cell(nRow, nCol).Range.Text = " "
        ENDIF
        
        nCol = nCol + 1
        USE   IN   temp_area_sum
    ENDSCAN
   
    * 计算产品合计
    SELECT   SUM(金额)   AS   product_sum   FROM   temp_data ;
    WHERE   ALLTRIM(产品) == lcProduct ;
    INTO   CURSOR   temp_product_sum
   
    IF   _TALLY > 0   AND   !ISNULL(temp_product_sum.product_sum)
        oTable.Cell(nRow, nCols).Range.Text = ALLTRIM(STR(temp_product_sum.product_sum, 10, 2))
    ELSE
        oTable.Cell(nRow, nCols).Range.Text = "0.00"
    ENDIF
   
    nRow = nRow + 1
    USE   IN   temp_product_sum
ENDSCAN

* 添加总计行
oTable.Cell(nRows, 1).Range.Text = "总计"

* 计算每个区域的总计
SELECT   cur_areas
nCol = 2
SCAN
    lcArea = ALLTRIM(区域)
   
    SELECT   SUM(金额)   AS   area_total   FROM   temp_data ;
    WHERE   ALLTRIM(区域) == lcArea ;
    INTO   CURSOR   temp_area_total
   
    IF   _TALLY > 0   AND   !ISNULL(temp_area_total.area_total)
        oTable.Cell(nRows, nCol).Range.Text = ALLTRIM(STR(temp_area_total.area_total, 10, 2))
    ELSE
        oTable.Cell(nRows, nCol).Range.Text = "0.00"
    ENDIF
   
    nCol = nCol + 1
    USE   IN   temp_area_total
ENDSCAN

* 计算整体总计
SELECT   SUM(金额)   AS   grand_total   FROM   temp_data   INTO   CURSOR   temp_grand
IF   _TALLY > 0   AND   !ISNULL(temp_grand.grand_total)
    oTable.Cell(nRows, nCols).Range.Text = ALLTRIM(STR(temp_grand.grand_total, 10, 2))
ELSE
    oTable.Cell(nRows, nCols).Range.Text = "0.00"
ENDIF

* 关闭Excel
oWorkbook.Close(.F.)
oExcel.Quit()

* 保存Word文档
oDoc.SaveAs(FileName)

* 清理对象
RELEASE   oSheet, oWorkbook, oExcel
RELEASE   oTable, oDoc, oWord

USE   IN   temp_data
USE   IN   cur_areas
USE   IN   cur_products
USE   IN   temp_grand
MESSAGEBOX("Word格式的销售统计表生成完成!", 64, "完成")

#12
吹水佬2025-11-18 16:40
分两部分
1、xls -> dbf    之前已经讨论过就不再重复
2、dbf -> doc    调用 dbf_to_word()

只有本站会员才能查看附件,请 登录

程序代码:

CLEAR   ALL
cPath=ADDBS(JUSTPATH(SYS(16)))
SET   DEFAULT   TO   (cPath)

wjm=cPath+"销售明细表.xls"
FileName=cPath+"销售统计表.doc"

* 连接Excel并读取数据
oExcel = CREATEOBJECT("Excel.Application")
oExcel.Visible = .F.
oWorkbook = oExcel.Workbooks.Open(wjm)
oSheet = oWorkbook.ActiveSheet

* 获取数据范围
nLastRow = oSheet.UsedRange.Rows.Count

* 创建临时表来存储Excel数据
CREATE   CURSOR   temp_data (订单号  C(10), 产品  C(20), 区域  C(10), 数量  N(5), 金额  N(10,2))

* 将Excel数据导入临时表
FOR   i = 2   TO   nLastRow
    lcOrder = ALLTRIM(TRANSFORM(oSheet.Cells(i, 1).Value))
    lcProduct = ALLTRIM(TRANSFORM(oSheet.Cells(i, 2).Value))
    lcArea = ALLTRIM(TRANSFORM(oSheet.Cells(i, 3).Value))
   
    * 获取金额
    lnQty = 0
    lnAmount = 0
   
    * 处理数量
    lcQtyValue = TRANSFORM(oSheet.Cells(i, 4).Value)
    IF   VARTYPE(lcQtyValue) = "C"   AND   !EMPTY(lcQtyValue)
        lnQty = VAL(lcQtyValue)
    ELSE
        lnQty = oSheet.Cells(i, 4).Value
    ENDIF
   
    * 处理金额
    lcAmountValue = TRANSFORM(oSheet.Cells(i, 5).Value)
    IF   VARTYPE(lcAmountValue) = "C"   AND   !EMPTY(lcAmountValue)
        lnAmount = VAL(lcAmountValue)
    ELSE
        lnAmount = oSheet.Cells(i, 5).Value
    ENDIF
   
    INSERT   INTO   temp_data   VALUES (lcOrder, lcProduct, lcArea, lnQty, lnAmount)
ENDFOR
* 关闭Excel
oWorkbook.Close(.F.)
oExcel.Quit()

dbf_to_word("temp_data", FileName)

CLOSE TABLES ALL
CLEAR ALL
RETURN

FUNCTION dbf_to_word(dbf_alias, cFileName)
    cmd_dbf = "CREATE CURSOR tb (产品 C(20)"
    cmd_sum = "SELECT '总计'"
    SELECT 区域 DISTINCT FROM (dbf_alias) ORDER BY 区域 INTO CURSOR tmp
    SCAN
        cf = ALLTRIM(区域)
        cmd_dbf = cmd_dbf + ","+cf+" N(10,2)"
        cmd_sum = cmd_sum + ",SUM("+cf+")"
    ENDSCAN
    cmd_dbf = cmd_dbf + ",合计 N(10,2))"
    cmd_sum = cmd_sum + ",SUM(合计)"
    EXECSCRIPT(cmd_dbf)
    SELECT 产品 DISTINCT FROM (dbf_alias) ORDER BY 产品 INTO CURSOR tmp
    SELECT tb
    APPEND FROM DBF("tmp")
    INDEX on 产品 TAG tag_产品
    SELECT 产品,区域,SUM(金额) 金额 FROM (dbf_alias) GROUP BY 区域,产品 INTO CURSOR tmp
    SET RELATION TO 产品 INTO "tb"
    SCAN
        REPLACE (tmp.区域) WITH tmp.金额, 合计 WITH 合计+tmp.金额 IN "tb"
    ENDSCAN
    DIMENSION arr[1]
    cmd_sum = cmd_sum + " FROM tb INTO ARRAY arr"
    EXECSCRIPT(cmd_sum)
    INSERT INTO tb FROM ARRAY arr
   
        * 创建Word应用程序对象
    oWord = CREATEOBJECT("Word.Application")
        * 创建新文档
    oDoc = oWord.Documents.Add()
        * 添加标题
    oWord.Documents(1).range.Text = "销售统计表"
    oWord.Documents(1).range.Font.Size = 16
    oWord.Documents(1).range.Font.Bold = .T.
    oWord.Documents(1).range.Font.Name="宋体"
    oWord.Documents(1).range.ParagraphFormat.Alignment = 1
        * 创建Word表格
    nRows = RECCOUNT("tb") + 1     && 产品行 + 标题行 + 总计行
    nCols = FCOUNT("tb")           && 区域列 + 产品列 + 合计列
    oTable = oDoc.Tables.Add(oDoc.Range(oDoc.Range.End-1, oDoc.Range.End-1), nRows, nCols)
    oTable.Style = "网格型"
    oWord.ActiveDocument.Tables(1).Range.Font.Bold=.F.
    oWord.ActiveDocument.Tables(1).Range.Font.size=11
    oWord.ActiveDocument.Tables(1).Range.Font.Name="宋体"
    oWord.ActiveDocument.Tables(1).Rows(1).Range.Font.Bold=.t.
        * 填充表头
    FOR i=1 TO FCOUNT("tb")
        oTable.Cell(1, i).Range.Text = FIELD(i,"tb")
    ENDFOR
        * 填充产品数据
    SELECT * FROM tb INTO ARRAY arr
    FOR i=1 TO RECCOUNT("tb")
        FOR j=1 TO FCOUNT("tb")
            oTable.Cell(i+1, j).Range.Text = IIF(VARTYPE(arr[i,j])=="N",TRANSFORM(arr[i,j],"@Z 999,999.99"), arr[i,j])
        ENDFOR
    ENDFOR
        * 保存Word文档
    oDoc.SaveAs(FileName)
    oDoc.Close
    oWord.Quit
    MESSAGEBOX("Word格式的销售统计表生成完成!"+0h0D+FileName, 64, "完成")
    **oWord.Visible = .T.
ENDFUNC



[此贴子已经被作者于2025-11-18 16:43编辑过]

#13
wengjl2025-11-19 08:51

在10楼完成  E 到 D 的基础上,昨天一下午时间,依11楼代码修改调试,完成  D 到 W 部分

CLEAR ALL
SET SAFETY off
SET engi 70
CLOSE DATABASES
cPath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)

FileName=cPath+"word_wj.doc"
oWord = CREATEOBJECT("Word.Application")       &&& 创建Word应用程序对象
oWord.Visible = .T.
oDoc = oWord.Documents.Add()                   &&& 创建新文档
oWord.Documents(1).range.Text = "销售统计表"   &&& 添加标题
oWord.Documents(1).range.Font.Size = 16
oWord.Documents(1).range.Font.Bold = .T.
oWord.Documents(1).range.Font.Name="宋体"
oWord.Documents(1).range.ParagraphFormat.Alignment = 1
SELECT * from 统计表 into cursor tt         &&& 为创建Word表格准备(4句)
SELECT tt
nCols=FCOUNT()
nRows=RECCOUNT() + 2
oTable = oDoc.Tables.Add(oDoc.Range(oDoc.Range.End-1, oDoc.Range.End-1), nRows, nCols,1)   &&& 创建表格, 此句oTable.Style = "网格型" 被最后的 1 所替代
oWord.ActiveDocument.Tables(1).Range.Font.Bold=.F.
oWord.ActiveDocument.Tables(1).Range.Font.size=11
oWord.ActiveDocument.Tables(1).Range.Font.Name="宋体"
oWord.ActiveDocument.Tables(1).Rows(1).Range.Font.Bold=.t.   &&& 表格的第一行字体加粗
FOR i=1 to nCols
  oTable.Cell(1, i).Range.Text = FIELD(i)   &&& 填充表头
ENDFOR
nRow = 1
SELECT tt
GO top
SCAN  
  nRow = nRow + 1
  FOR i=1 to nCols
    lcPm = EVALUATE(FIELD(i))
    oTable.Cell(nRow, i).Range.Text = lcPm  &&& 填充“产品&金额”的数据
  ENDFOR
  SELECT tt
ENDSCAN
oTable.Cell(nRows, 1).Range.Text = "总计"   &&& 处理总计行
FOR i=2 to nCols
  sn=0
  SELECT tt
  SCAN
    sn=sn+EVALUATE(FIELD(i))
  ENDSCAN
  oTable.Cell(nRows, i).Range.Text =sn      &&& 记录每个区域的合计数
ENDFOR
FOR i=2 to nCols
  FOR j=2 to nRows
    IF oTable.Cell(j, i).Range.Text = "0"
      oTable.Cell(j, i).Range.Text = ""     &&& 清空 0 值
    ENDIF
  ENDFOR
ENDFOR
oDoc.SaveAs(FileName)                       &&& 保存Word文档
oDoc.close
oWord.quit
CLOSE DATABASES
MESSAGEBOX("Word格式的销售统计表生成完成!", 64, "提示:")
QUIT
#14
schtg2025-11-19 12:14
向各位大侠学习!
#15
王咸美2025-11-19 13:25
谢谢!
#16
chychychy2025-11-19 14:16
留个脚印,学习了
#17
wengjl2025-11-19 15:02
为减少13楼的代码,设想总体粘贴,测试:

CLEAR ALL
SET SAFETY off
SET engi 70
CLOSE DATABASES
cPath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)
USE 统计表               &&& 10楼已解决
COPY TO ls type xl5
FileName=cPath+"word_wj.doc"

oWord = CREATEOBJECT("Word.Application")       &&& 创建Word应用程序对象
oWord.Visible = .T.
oDoc = oWord.Documents.Add()                   &&& 创建新文档
oWord.Documents(1).range.Text = "销售统计表"   &&& 添加标题
oWord.Documents(1).range.Font.Size = 16
oWord.Documents(1).range.Font.Bold = .T.
oWord.Documents(1).range.Font.Name="宋体"
oWord.Documents(1).range.ParagraphFormat.Alignment = 1
*---
oe=CREATEOBJECT("excel.application")
oe.visible=.T.
oe.DisplayAlerts = 0                      &&& 关闭EXCEL的对话框
oe.WorkBooks.Open(cpath+"ls.xls")         &&& 打开EXCEL文档
as = oe.ActiveSheet
as.UsedRange.copy                         &&& 拷贝用户数据区域
oWord.documents(1).range.pastespecial     &&& 粘贴表格

经粘贴后,观察:EXCEL上的表是粘贴过来了,可前一步添加的标题被覆盖掉了,如何解决?
麻烦高手赐教!谢谢!


#18
吹水佬2025-11-19 16:22
试试:
oWord.documents(1).range(2,1).pastespecial
#19
wengjl2025-11-19 16:39
以下是引用吹水佬在2025-11-19 16:22:12的发言:

试试:
oWord.documents(1).range(2,1).pastespecial


没有通过,出现如下图
只有本站会员才能查看附件,请 登录


没找到 控制WORD光标位置的命令!

[此贴子已经被作者于2025-11-19 16:43编辑过]

#20
wengjl2025-11-19 16:46
试出来了

只有本站会员才能查看附件,请 登录
#21
吹水佬2025-11-19 16:46
回复 19楼 wengjl
没测试过
参考:https://learn.
#22
吹水佬2025-11-19 16:49
Range(Start,End)
Start,End 是不是要表格要求
#23
hsfisher2025-11-20 08:23
学习了
#24
wengjl2025-11-20 09:34

问了DeepSeek后,终于试成功了

CLEAR ALL
SET SAFETY off
SET engi 70
CLOSE DATABASES
cPath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)
USE 统计表                                     &&& 在10楼已解决
COPY TO ls type xl5
FileName=cPath+"word_wj2.doc"
*---
oWord = CREATEOBJECT("Word.Application")       &&& 创建Word应用程序对象
oWord.Visible = .T.
oDoc = oWord.Documents.Add()                   &&& 创建新文档
oWord.Documents(1).range.Text = "销售统计表"   &&& 添加标题
oWord.Documents(1).range.Font.Size = 16
oWord.Documents(1).range.Font.Bold = .T.
oWord.Documents(1).range.Font.Name="宋体"
oWord.Documents(1).range.ParagraphFormat.Alignment = 1
*---
oe=CREATEOBJECT("excel.application")
oe.visible=.T.
oe.DisplayAlerts = 0                      &&& 关闭EXCEL的对话框
oe.WorkBooks.Open(cpath+"ls.xls")         &&& 打开EXCEL文档
as = oe.ActiveSheet
as.usedRange.BorderS(1).LineStyle=1       &&& 添加左边框线
as.usedRange.BorderS(2).LineStyle=1       &&& 添加右边框线
as.usedRange.BorderS(3).LineStyle=1       &&& 添加上边框线
as.usedRange.BorderS(4).LineStyle=1       &&& 添加下边框线  
as.UsedRange.copy                         &&& 拷贝用户数据区域
oWord.Selection.EndKey(6)                 &&& 移动到文档末尾
oWord.Selection.TypeParagraph()           &&& 插入换行
oWord.Selection.paste()                   &&& 表格整体粘贴。
*---
as.Activate  
oe.workbooks.Close
oe.DisplayAlerts = 1                      &&& 开启EXCEL的对话框
oE.Quit()
*---
oDoc.SaveAs(FileName)                     &&& 保存Word文档
oDoc.close
oWord.quit
CLOSE DATABASES
MESSAGEBOX("Word格式的销售统计表生成完成!", 64, "提示:")
QUIT
#25
chychychy2025-11-20 17:15
回复 24楼 wengjl
学习了
#26
王咸美2025-11-20 17:31
谢谢!
1