|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Сохранение текста в Word
Здравствуйте, уважаемые форумчане!
Вы не могли бы мне немного помочь (как обычно, страницы на 2-3) ? Когда-то я задавал похожий вопрос в теме http://www.delphisources.ru/forum/sh...ad.php?t=28865, в которой расписывал код. Так вот, все работает, кроме одного момента (который раньше работал, а теперь вообще никак не хочет). Сохранение списка файлов по метке. Теперь подробнее: 1. Есть код, который сохраняет текст в MS Word по маркеру: Код:
WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%msku%'; // Текст, который меняем Replese_T := sau; // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%akty%'; // Текст, который меняем Replese_T := docs; // Заменить на 2. В первом случае, где Код:
Find_T := '%msku%'; // Текст, который меняем Replese_T := sau; // Заменить на А вот во втором, где список файлов: Код:
Find_T := '%akty%'; // Текст, который меняем Replese_T := docs; // Заменить на 3. Уже перепробовал разные варианты сохранения (в Memo, ListBox, RichEdit); 4. Пробовал в строке Код:
Replese_T := docs; 5. Переменная docs описана в процедуре вывода списка файлов из папки в RichEdit: Код:
var docs : String; ... // Путь к каталогу отсканированных документов procedure TForm8.SpeedButton2Click(Sender: TObject); var tsr : tSearchRec; begin //Путь к папке, в которой нужно произвести поиск. Начальное значение выбираем //равным пути к той папке, в которой расположена наша программа. if gPath = '' then gPath := ExtractFilePath(ParamStr(0)); //Диалог выбора папки. if not SelectDirectory('Выбор папки', '', gPath) then Exit; gPath := IncludeTrailingPathDelimiter(gPath); //Если конечный слеш отсутствует, то добавляем его. //Все файлы, исключая тома и папки. Edit3.Text := gPath; if FindFirst (gPath + '*.*',faAnyFile,tsr)=0 then repeat RichEdit13.Lines.Add(tsr.Name); docs := RichEdit13.Text; until FindNext(tsr)<>0; FindClose(tsr); end; Ну и, как водится, привожу полный код: Код:
// Создаем реестр документов procedure TForm8.Button2Click(Sender: TObject); const // массивные маркеры marker: array[1..6] of string[25] = ('%sotrudnik%', // Маркер выбора сотрудника '%date_in%', // Маркер даты начала командировки '%date_out%', // Маркер даты окончания командировки '%station%', // Маркер трансгаза '%msku%', // Маркер шифра системы '%akty%'); // Маркер блока "Акты по результатам ПНР" var FTrue, Ffalse, Template, NewTemplate, ItemIndex1, R, D, DD, Replese_T, Find_T: OleVariant; Tbl, L, col: OleVariant; j: integer; transgaz : String; sau : String; begin // Запрет выполнения операции, если не загружен info-файл if (trim(Edit1.Text) = '') Then begin if MessageBox(Handle,PChar('Не указан путь к info-файлу!'#13#10'Операция не может быть выполнена!'),PChar('Недопустимое значение полей'),MB_ICONERROR+MB_OK)= mrOk then exit; end; // Запрет выполнения операции, если не указан каталог с документами if (trim(Edit3.Text) = '') Then begin if MessageBox(Handle,PChar('Не указан каталог с документами!'#13#10'Операция не может быть выполнена!'),PChar('Недопустимое значение полей'),MB_ICONERROR+MB_OK)= mrOk then exit; end; Xlsdoc := CreateOleObject('Excel.Application'); Xlsdoc.Workbooks.Open(Edit1.Text); Xlsdoc.Visible := False; transgaz := Xlsdoc.Range['B3']; sau := Xlsdoc.Range['B2']; Xlsdoc.Workbooks.Close; Xlsdoc.Quit; Xlsdoc:=UnAssigned; Memo1.Lines.Add('Соединение с шаблоном реестра документов...'); Application.ProcessMessages; try WA2.Connect; WA2.Visible := False; Template := EmptyParam; NewTemplate := False; FTrue := true; Ffalse := false; except ShowMessage('Не удалось соедениться с шаблоном реестра документов!'); Memo1.Lines.Add('Не удалось соедениться с шаблоном реестра документов!' ); Application.ProcessMessages; exit; end; Memo1.Lines.Add('Создаем реестр документов...'); Application.ProcessMessages; // Добавляем документ из имеющегося со статусом несохраненного нового документа try R := ExtractFilePath(Application.ExeName)+'\Shablon\Reestr.dot'; ItemIndex1 := WA2.Documents.Add(R, NewTemplate, NewTemplate, Template); WD2.ConnectTo(WA2.Documents.Item(ItemIndex1)); except Memo1.Lines.Add('Не удалось соедениться с шаблоном реестра документов (Reestr.dot)! Проверьте расположение файла!' ); Application.ProcessMessages; ShowMessage('Не удалось соедениться с шаблоном реестра документов (Reestr.dot)! Проверьте расположение файла!'); WD2.Application.Selection.EndOf(Template, Template); WA2.Application.WindowState := wdWindowStateMaximize; WA2.Application.ScreenUpdating := true; WA2.Application.ScreenRefresh; WA2.Visible := true; WA2.Disconnect; WD2.Disconnect; exit; end; try // Количество таблиц в документе и количество строк со столбцами col := WA2.ActiveDocument.Tables.Count; for j := 1 to col do begin Memo1.Lines.Add('Подключаемся к приложению MS Word...'+Inttostr(j)); Application.ProcessMessages; tbl := WA2.ActiveDocument.Tables.Item(j); // Присоеденяемся к таблице end; L := wdStory; // В начало документа WA2.Selection.HomeKey(L, EmptyParam); Memo1.Lines.Add('Заменяем маркеры на текст...' ); Application.ProcessMessages; Find_T := '%sotrudnik%'; // Текст, который меняем D := wdFindStop; // Найти один раз DD := wdReplaceAll; // Замена все Replese_T := ComboBox1.Text; // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%date_in%'; // Текст, который меняем Replese_T := DateToStr(DateTimePicker1.Date); // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%date_out%'; // Текст, который меняем Replese_T := DateToStr(DateTimePicker2.Date); // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%station%'; // Текст, который меняем Replese_T := transgaz; // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%msku%'; // Текст, который меняем Replese_T := sau; // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Find_T := '%akty%'; // Текст, который меняем Replese_T := docs; // Заменить на WA2.Selection.Find.Execute(Find_T, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, D, EmptyParam, Replese_T, DD, EmptyParam, EmptyParam, EmptyParam, EmptyParam); WD2.Application.Selection.EndOf(Template, Template); except WA2.Visible := true; WA2.Disconnect; WD2.Disconnect; Memo1.Lines.Add('Ошибка!' ); Application.ProcessMessages; exit; end; Memo1.Lines.Add('Экспорт завершен.' ); Application.ProcessMessages; WA2.Visible := True; Name2 := (ExtractFilePath(Application.ExeName)+'Реестр_документов_'+FormatDateTime('ddmmyyyy_hhmm', Now)+'.doc'); WD2.SaveAs(Name2); WD2.Disconnect; WA2.Disconnect; WA2.Quit; MessageBox(Handle,PChar('Создание реестра документов выполнено успешно!'),PChar('Успех!'),MB_ICONINFORMATION+MB_OK); end; P.S. Самое важное чуть не забыл! Если ввести текст, как константу, то все заменяется нормально и правильно. Видимо, проблема именно из-за того, что это список. Последний раз редактировалось ffpereverzev, 22.05.2017 в 09:36. |
#2
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ffpereverzev (23.05.2017)
|
#3
|
||||
|
||||
Попробую. Спасибо большое! Как протестирую - отпишусь.
|