В Visual Foxpro, как экспортировать в Excel с полным

Я ищу, чтобы экспортировать таблицу из Visual Foxpro 5.0, чтобы преуспеть с итогом для одного столбца. Я знаю, что вы можете рассчитать сумму (столбец), но я не знаю, как включить это в экспорт.

4 ответа

Решение

Я знаю, что вы можете рассчитать сумму (столбец), но я не знаю, как включить это в экспорт

Короткий ответ: ты не можешь.

Вы можете использовать команду VFP: COPY TO файл Excel XL5 для вывода данных в указанный файл Excel, но вычисленные значения не будут включены.

НО, после того как вы записали данные, вы можете использовать VFP Automation of Excel, чтобы либо записать вычисленное значение в определенную ячейку, либо вы можете запустить Excel для вычисления и поместить результат в указанную ячейку.

Если вы еще не сделали VFP Automation of Excel, вам может потребоваться Google для этого, поскольку он включает в себя ряд команд, которые должны варьироваться в зависимости от ваших конкретных потребностей.

Удачи

Если вам это нужно в Excel, тогда зачем вообще использовать sum? Excel умеет суммировать. Если вам действительно нужно, вы можете сделать это, просто создав курсор с добавленной строкой для хранения суммы. Что-то вроде:

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

Создание данных Excel из курсора / таблицы - более сложная часть, но есть много способов (то есть: просто копирование в виде файла с разделителями с заголовком, который вы создаете.CSV, который затем можно открыть с помощью Excel). ИМХО одним из лучших способов является передача данных с использованием набора записей ADO. Вы можете искать код VFP2Excel в Интернете. Я написал и опубликовал много ее вариантов (я добавлю ссылку, если скоро ее найду - для VFP5 могут потребоваться небольшие изменения для команды \ функций, недоступной в VFP5).

(Или вы можете сделать это другим способом и напрямую получить данные из Excel, используя ADO - QueryTables).

OK нашел много ссылок, некоторые из них:

Vfp2Excel обсуждение

Автоматизация Excel на fox.wikis

Еще один

Я подумал о другом способе получить вычисленную сумму в файл Excel, но это своего рода "кладж", и в файле Excel это действительно не будет динамический расчет, а вместо этого будет ячейка, которая может статически удерживайте вычисленное значение VFP.

Хорошо, вот "Kludge"....
Откройте таблицу данных VFP и выполните расчет итогов.
APPEND BLANK, чтобы добавить новую пустую запись, и в одном из полей ЗАМЕНИТЬ ее значение на рассчитанную сумму.

Теперь сделайте свой файл COPY TO Excel XL5
Все ваши данные будут записаны, и эти данные будут включать в себя рассчитанную итоговую запись с ее значением.

ПРИМЕЧАНИЕ. Если необходимо, чтобы строки Excel находились в последовательности, отличной от исходной таблицы данных VFP, перед запуском COPY TO... выполните запрос SQL, чтобы получить все записи в нужном порядке, и запишите результаты в новый стол / курсор переписать.
Затем вы должны добавить "Пустой бланк" к результирующей таблице / курсору и использовать его для "Копировать в...".

Удачи

Вы можете использовать лист 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
Другие вопросы по тегам