在 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,其中一些:
我确实想到了另一种方法将计算出的总数放入 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...
祝你好运
我希望将 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,其中一些:
我确实想到了另一种方法将计算出的总数放入 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...
祝你好运