Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы при копировании 
:(
    Опции темы
marhatter
Дата 5.4.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Проблема такая. Есть текстовый документ, в котором находятся лицевые счета. Есть файлы *.rtf, в которых находится информация, связанная с этим лицевым счетом (ФИО, дата рождения, сам лицевой счет, ...). В файлах порядка 1000-1500 страниц. Некоторая информация находится в таблицах. Для конкретного лицевого счета информация может располагаться на 1-15 страницах. Алгоритм такой: 
1) читаю с текстового файла лицевой счет
2) ищу его в файлах *.rtf
3) выделяю нужную информацию (данные связанные с лицевым счетом)
4) вырезаю их 
5) вставляю в новый документ
Так вот проблема в ом, что некоторые таблицы "криво" форматируются при вставке. Допустим таблица было в документе "По все ширине", стала по "левому краю". Ширина столбцов также меняется.
Код

 MsWord := CreateOleObject('Word.Application');
  MsWord.Visible := false;
  MsWord.Options.CheckSpellingAsYouType := false;
  MsWord.Options.CheckGrammarAsYouType := false;
  MsWord.DisplayAlerts := false;
  Word1 := CreateOleObject('Word.Application');
  Word1.Visible := false;
  Word1.Options.CheckSpellingAsYouType := false;
  Word1.Options.CheckGrammarAsYouType := false;
  doc1 := Word1.Documents.Add();
  Word1.Selection.PageSetup.LeftMargin := CentimetersToPoints(1.75);
  path := GetCurrentDir + '\' + vid + '\RTF\';
  if  FindFirst(path + '\*.rtf', faArchive, sr) = 0 then
  begin
    repeat
      if (sr.Name = '.') or (sr.Name = '..') then continue;
      AssignFile(f, GetCurrentDir + '\' + vid + '\' + fl);
      Reset(f);
      Form1.StatusBar1.Panels[1].Text := sr.Name;
      doc := MsWord.Documents.Open(path + sr.Name);
      doc.Tables.Item(2).Delete;
      MsWord.Selection.EndKey(wdStory);
      //MsWord.Selection.InsertNewPage;
      MsWord.Selection.InsertBreak(Type:=wdPageBreak);
      MsWord.Selection.TypeText(str);
      while not Eof(f) do
      begin
        Readln(f, snils);
        Delete(snils, 1, 16);
        Delete(snils, 12, Length(snils));
        if (snils <> '') and (snils[1] <> '-') and (snils[4] = '-') and (snils[8] = '-') then
        begin
          Form1.StatusBar1.Panels[0].Text := snils;
          MsWord.Selection.Find.Forward := True;
          MsWord.Selection.Find.Text := snils;
          MsWord.Selection.Find.Wrap := 1;
          if MsWord.Selection.Find.Execute then
          begin
            Form1.Memo1.Lines.Add(snils + ' в ' + sr.Name );
            sel := MsWord.Selection;
            sel.Collapse(wdCollapseStart);
            Sleep(2200);
            sel.GoToNext(wdGoToPage).Select; 
            //PageEnd := sel.Start; 
            Sleep(2200);
            sel.GoToPrevious(wdGoToPage).Select; 
            PageStart := sel.Start; 
            MsWord.Selection.Find.Forward := True;
            MsWord.Selection.Find.Text := str;
            MsWord.Selection.Find.Wrap := 1;
            kol := 1;
            while MsWord.Selection.Find.Execute do
            begin
              if kol = 2 then
                begin
                  MsWord.Selection.Collapse(wdCollapseStart);
                  Sleep(2200);
                  MsWord.Selection.GoToNext(wdGoToPage).Select;
                  Sleep(2200);
                  MsWord.Selection.GoToPrevious(wdGoToPage).Select;
                  PageEnd := MsWord.Selection.Start;
                  doc.Range(PageStart, PageEnd).Select;
                  MsWord.Selection.cut;
                  Word1.Selection.Paste;
                  //Word1.Selection.InsertNewPage;
                  Word1.Selection.InsertBreak(Type:=wdPageBreak);
                  break;
                end;
              Inc(kol);
            end;
          end;
        end;
      end;
      doc.SaveAs(path + sr.Name);
      doc.Close();
      Inc(j);
      Form1.ProgressBar2.Position := j;
    until Findnext(sr) <> 0;
  end;
  doc1.SaveAs(GetCurrentDir + '\' + vid + '\' + tip + '\' + tip + '.doc');
  doc1.Close();
  MsWord.Quit();
  Word1.Quit();

В 2007 Word'e нормально отображается. В ранних версиях "криво". Заранее спасибо.
PM MAIL   Вверх
marhatter
Дата 7.4.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Не уж то это не решаемо?
PM MAIL   Вверх
marhatter
Дата 11.4.2011, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Никто не знает в чем проблема???
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.