2016-02-08 5 views
0

Я использовал следующий код, чтобы показать отчет.Как преобразовать визуальный файл foxpro 6 в сообщение

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, кроме изображения.

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

В случае изображения в нем отображается только путь. Теперь мне нужно знать, как я могу преобразовать этот отчет в слово, чтобы у меня были изображения в отчете о словах.

ответ

0

Похоже, что вы создаете простой список с картинками. Один из самых простых способов сделать это - использовать автоматизацию. то есть:

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 

Однако отправка данных на слово таким образом будет иметь производительность, если у вас много строк. Вы можете использовать это для небольших данных, таких как таблица сотрудников или около того. При использовании больших данных вместо автоматизации вы можете просто создать документ HTML, а слово откроет HTML-документ.

+0

да, его работа. Большое спасибо. –

0

Существует нет родного способа сделать это. Я бы исследовал FoxyPreviewer и использовал это, чтобы сообщить RTF, которое Word может открыть.

Или сделайте это в обратном порядке с помощью слияния в Word.

+0

Я загрузил FoxyPreviewer. Я смущен о некоторых моментах: 1. где хранить этот файл и как его использовать? 2. В этой ссылке «https://foxypreviewer.codeplex.com/documentation» подразумевается «начало вашего исполняемого файла» и «YourReport». должен ли я писать как «форму отчета» c: \ edrs \ reports \ rptsearch.frx «Для типа объекта PRINT 12 NOCONS» для моего примера и «DO FOXYPREVIEWER.APP» в начале этой кнопки нажмите –

0

В дополнение к FoxyPreviewer вы также можете использовать автоматизацию OLE Office для программной сборки отчета. В Интернете есть множество примеров и даже книга Microsoft Office Automation, написанная Тамаром Э. Гранором. & Della Martin.

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