在 Visual Foxpro 中如何将总计导出到 excel

In Visual Foxpro how to export to excel with total

我希望将 table 从 Visual Foxpro 5.0 导出到 excel,总共为一列。我知道您可以计算总和(列),但我不知道如何将其包含在导出中。

I know you can calculate sum(column) but I don't know how to include this in the export

简短的回答是你不能。

可以使用VFP的命令:COPY TO excel file XL5将DATA输出到指定的Excel 文件,但不会包含计算值。

但是,在写入数据后,您可以使用 Excel 的 VFP 自动化将计算值写入特定单元格,或者您可以 Excel 运行为您计算并将结果放入指定的单元格中。

如果您还没有完成 Excel 的 VFP 自动化,您可能想要 Google 因为它涉及许多命令,这些命令需要根据您的特定需求而有所不同。

祝你好运

您可以使用 excel sheet 作为模板。然后将 FoxPro 中的特定单元格填充到此模板中,模板中的函数和格式将适用于您的数据。

lcExcelFile = "output.xls" && your ouput

oExcelObject = CREATEOBJECT('Excel.Application')
oExcelWorkbook = ;
    oExcelObject.APPLICATION.Workbooks.OPEN(sDir + "\" + "template.xls") && your template
oActiveExcelSheet = oExcelWorkbook.Worksheets("sheet").ACTIVATE
oExcelSheet = oExcelWorkbook.Worksheets("sheet")

WAIT WINDOW "Developing Microsoft Excel File..." + CHR(13) + "" + CHR(13) + ;
    "Passing formatting information to Excel." + CHR(13) + "" NOWAIT

SELECT cTmp && your data table or cursor
GOTO TOP
oExcelSheet.Cells(1,1).VALUE = sTitle
nRow = 3 && moving past title 
sNote = ""

DO WHILE NOT EOF()

    nRow = nRow + 1
    && Insertint Records
    oExcelSheet.Cells(nRow,1).VALUE = STR(cTmp.INlocx)
    oExcelSheet.Cells(nRow,2).VALUE = ALLTRIM(cTmp.INacct) + '-' + ALLTRIM(cTmp.INmr_)
    oExcelSheet.Cells(nRow,3).VALUE = ALLTRIM(cTmp.INpnam)
    oExcelSheet.Cells(nRow,4).VALUE = ALLTRIM(cTmp.INCARR)
    oExcelSheet.Cells(nRow,5).VALUE = ALLTRIM(cTmp.INADR1) + ALLTRIM(cTmp.INADR2)
    oExcelSheet.Cells(nRow,6).VALUE = ALLTRIM(cTmp.INCITY)
    oExcelSheet.Cells(nRow,7).VALUE = ALLTRIM(cTmp.INSTAT)
    oExcelSheet.Cells(nRow,8).VALUE = STR(cTmp.INZIP)
    oExcelSheet.Cells(nRow,9).VALUE = STR(cTmp.INAREA)
    oExcelSheet.Cells(nRow,10).VALUE = STR(cTmp.INPHON)
    oExcelSheet.Cells(nRow,11).VALUE = ALLTRIM(cTmp.INPOL_)
    oExcelSheet.Cells(nRow,12).VALUE = ALLTRIM(cTmp.INGRP_)
    oExcelSheet.Cells(nRow,13).VALUE = ALLTRIM(cTmp.INPOLH)
    oExcelSheet.Cells(nRow,14).VALUE = STR(cTmp.INEFDT)
    oExcelSheet.Cells(nRow,15).VALUE = STR(cTmp.INETDT)
    oExcelSheet.Cells(nRow,16).VALUE = ALLTRIM(cTmp.INRELATE)



    SELECT cTmp
    SKIP
ENDDO

&&saving template AS output
oExcelWorkbook.SAVEAS(lcExcelFile)
oExcelObject.QUIT
RELEASE oExcelObject

如果您在 excel 中需要它,那为什么还要求和呢? Excel 懂得求和。如果你真的需要那么你可以通过简单地创建一个游标来做到这一点,并添加一行来保存总和。类似于:

select f1, f2, f3 from myTable ;
union all ;
select '', '', sum(f3) as f3 ;
from myTable group by 1,2

从 cursor/table 创建 excel 数据是比较棘手的部分,但有很多方法(即:简单地复制为带有 header 的分隔文件,您创建 .CSV,这然后可以通过 excel) 打开。恕我直言,最好的方法之一是使用 ADO 记录集传递数据。您可以在互联网上搜索 VFP2Excel 代码。我已经编写并发布了它的许多变体(如果我很快找到一个,我会添加一个 link - 对于 VFP5,它可能需要对 VFP5 中不可用的 command\functions 稍作改动)。

(或者您可以用另一种方式执行此操作并使用 ADO - QueryTables 直接从 Excel 获取数据)。

确定找到很多 link,其中一些:

Vfp2Excel discussion

Excel automation on fox.wikis

Yet another one

我确实想到了另一种方法将计算出的总数放入 Excel 文件中,但它有点像 'kludge' 并且在 Excel 文件中它真的不会是一个动态计算,而是一个可以静态保存 VFP 计算值的单元格。

好的,这是 'kludge'.....
打开 VFP 数据 table 和 运行 总计计算。
APPEND BLANK 添加一个新的空记录,并在其中一个字段中将其值替换为计算出的总计。

现在 COPY TO excel 文件 XL5
您的所有数据都将被写入,并且该数据将包括您计算的总记录及其值。

注意:如果您需要 Excel 行的顺序不同于原始 VFP 数据 table,则在复制到... 运行 之前 SQL 查询以按照您想要的顺序获取所有记录 - 并将结果写入新的 Table/Cursor READWRITE。
然后你会在结果 Table/Cursor 上做 Append Blank 并用它来 COPY TO...

祝你好运