如何将 visual foxpro 6 报告转换为 word

How to convert visual foxpro 6 report to word

我使用了以下代码来显示报告。

select mem_no,com_name,owner,owner_cate,iif(empty(photo),"c:\edrs\memphoto\void.JPG",iif(file(photo),photo,"c:\edrs\memphoto\void.JPG")) as photo from own1  into curs own

REPO FORM c:\edrs\reports\rptsearch.frx TO PRINT PREVIEW NOCONS

这里 rptsearch.frx 包含一些图片。以下代码将数据导出到 excel 除了 image.

COPY TO "c:\documents and settings\administrator\desktop\a.xls" TYPE XLS

如果是图片,它只显示路径名。现在我需要知道如何在word中转换这个报告,这样我就可以在word报告中得到图像。

没有本地方法可以做到这一点。我会调查 FoxyPreviewer 并用它来报告给 Word 可以打开的 RTF。

或者反过来,在 Word 中使用邮件合并。

除了 FoxyPreviewer 之外,您还可以使用 OLE Office 自动化以编程方式构建报表。网上有很多例子,甚至还有一本书,Microsoft Office Automation,作者是 Tamar E. Granor 和 Della Martin。

我在自动化方面做的不多,只够让它基本上验证它是否有效,并发现它对于我尝试做的事情来说非常慢。

您似乎正在创建一个简单的图片列表。最简单的方法之一是使用自动化。即:

Select mem_no,com_name,owner,owner_cate,;
    iif(Empty(photo) Or !File(photo),"c:\edrs\memphoto\void.JPG",photo) As photo ;
    from own1  ;
    into Curs crsData ;
    nofilter

#Define wdWord9TableBehavior 1
#Define wdAutoFitWindow 2
#Define wdStory 6
#Define wdCollapseEnd 0
#Define wdCellAlignVerticalCenter 1
#Define CR Chr(13)

Local Array laCaptions[5]
laCaptions[1] = 'Mem No'
laCaptions[2] = 'Com Name'
laCaptions[3] = 'Owner'
laCaptions[4] = 'Owner Cate'
laCaptions[5] = 'Photo'

Local nRows, nCols, ix
nRows = Reccount('crsData')+1
nCols = Fcount('crsData')+1

oWord = Createobject('Word.Application')
With m.oWord
    oDocument = .Documents.Add
    With m.oDocument.Tables.Add( m.oWord.Selection.Range, m.nRows, m.nCols)
        .BorderS.InsideLineStyle = .F.
        .BorderS.OutsideLineStyle = .F.

        For ix=1 To Alen(laCaptions)
            **** Add captions *****
            .Cell(1,m.ix).Range.InsertAfter( laCaptions[m.ix] )
        Endfor

        Select crsData
        Scan
            For ix=1 To Fcount()-1 && last one is photo path
                **** Add values to the different cells *****
                .Cell(Recno()+1,m.ix).Range.InsertAfter( Eval(Field(m.ix)) )
            Endfor
            lcPhoto = crsData.photo
            If File(m.lcPhoto) && Add photo if any
                oDocument.InlineShapes.AddPicture( m.lcPhoto, .T., .T.,;
                    .Cell(Recno()+1,Fcount()).Range)
            Endif
            .Rows(Recno()+1).Cells.VerticalAlignment = wdCellAlignVerticalCenter
        Endscan
    Endwith

    .Visible = .T.
Endwith

但是,如果您有很多行,以这种方式将数据发送到 word 会影响性能。您可以将其用于小数据,例如员工 table 左右。对于更大的数据,您可以简单地创建一个 HTML 文档,而不是使用自动化,Word 将打开一个 HTML 文档。