在Visual Foxpro中如何导出到excel与total

时间:2018-02-16 16:33:16

标签: excel sum export visual-foxpro foxpro

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

4 个答案:

答案 0 :(得分:1)

如果你需要excel那么为什么要总结? Excel知道如何总结。如果你真的需要那么你可以通过简单地创建一个添加了行来保存总和的游标来做到这一点。类似的东西:

bar { foo1, foo2, foo3 ->

}

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

(或者你可以这样做,并使用ADO直接从Excel获取数据 - QueryTables。)

确定找到了很多链接,其中一些是:

Vfp2Excel discussion

Excel automation on fox.wikis

Yet another one

答案 1 :(得分:0)

  

我知道你可以计算总和(列),但我不知道如何包括   这在出口

简短的回答是你不能。

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

但是,在写完数据之后,您可以使用VFP Automation of Excel将计算出的值写入特定单元格,也可以让Excel为您运行计算并将结果放入指定的单元格。

如果您还没有完成VFP Automation of Excel,那么您可能需要Google,因为它涉及许多需要根据您的特定需求而变化的命令。

祝你好运

答案 2 :(得分:0)

您可以使用Excel工作表作为模板。然后将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

答案 3 :(得分:0)

我确实想到了将计算出的总数计算到Excel文件中的另一种方法,但它确实是一种“kludge'在Excel文件中,它实际上不是动态计算,而是一个可以静态保持VFP计算值的单元格。

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

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

注意:如果您需要Excel行与原始VFP数据表的顺序不同,那么在COPY TO之前...运行SQL查询以将所有记录转换为您想要的顺序 - 并写入结果到新的表/光标READWRITE 然后,您将在结果表/光标上执行追加空白并使用它来复制到...

祝你好运