Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2016, 05:30   #1
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию Delphi! Программка для считывания данных из Word

Всем здравствуйте!!
Мое задание:
1. Создать программу для считывания текста (ФИО, №) файлов из Ворда. То есть загружаем документ Word в программу, а программа автоматически просматривает информацию из каждого загруженного документа - Фамилию Имя Отчество и Номер(это в самом документе написано), и формирует в таблицу эти данные. А еще хотелось бы, чтобы этот документ тоже сохранялся в этой таблице, чтобы его всегда можно было открыть из программы.

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids,ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    procedure Label1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s:string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var FindFile: TSearchRec;
    k:integer;
begin
k:=2;
//if OpenDialog1.Execute then

if FindFirst('d:\*.docx', faAnyFile, FindFile)=0
  then begin

StringGrid1.Cells[1, 1]:=FindFile.Name;
StringGrid1.Cells[2, 1]:=FindFile.Name;
StringGrid1.Cells[3, 1]:=FindFile.Name;
StringGrid1.Cells[4, 1]:=IntToStr(FindFile.Size)+' KB';

while FindNext(FindFile)=0 do
  begin
StringGrid1.Cells[1, k]:=FindFile.Name;
StringGrid1.Cells[2, k]:=FindFile.Name;
StringGrid1.Cells[3, k]:=FindFile.Name;
StringGrid1.Cells[4, k]:=IntToStr(FindFile.Size)+' KB';
 k:=k+1;
  end;

FindClose(FindFile);
       end;
//ShellExecute (Form1.Handle, nil, PChar(sait), nil, nil, SW_RESTORE);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

StringGrid1.Cells[1,0]:='FIO';StringGrid1.Cells[0,1]:='1';
StringGrid1.Cells[2,0]:='№ Производства по делу';StringGrid1.Cells[0,2]:='2';
StringGrid1.Cells[3,0]:='Ссылка';StringGrid1.Cells[0,3]:='3';
StringGrid1.Cells[4,0]:='Размер';StringGrid1.Cells[0,4]:='4';

end;
procedure TForm1.Label1Click(Sender: TObject);
begin
s:='d:\петров.docx';
shellapi.ShellExecute(Application.Handle, 'open',pChar(s),'',pChar(extractfilepath(s)),SW_SHOWDEFAULT)
//s - имя файла
end;

{procedure TForm1.StringGrid1CellsClick(Column: TColumn);
begin
  if Column.Field.FieldName='Name' then
    ShellExecute(0, 'open', PChar(Table1.FieldByName('Name').AsString), nil, nil, SW_SHOWNORMAL);
end;
}

end.

Пока что написан такой код, но он просто формирует в таблицу документы по их названиям, а нужно, чтобы из самого файла считывал информацию.

Помогите пожалуйста!!!
Спасибо =))

Последний раз редактировалось Аватар; 15.11.2016 в 09:47.
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 15.11.2016, 09:42   #2
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от ya_yanchik-2909 Посмотреть сообщение
Создать программу для считывания текста (ФИО, №) файлов из Ворда.
Для того чтобы выкусить эти данные из текста, необходимо знать структуру файла, для того чтобы задать критерии поиска. Где конкретно в файле хранятся эти данные (я так понял речь не о разделе "подробно" автор файла и т. д.)? Все файлы структурированы по одному принципу? Пример файла в студию.
Replicant вне форума Ответить с цитированием
Старый 15.11.2016, 10:16   #3
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию

Глобальная организация:
С Т А Т И С Т И Ч Е С К А Я К А Р Т О Ч К А Н А П О Д С У Д И М О Г О

1.Статистическая карточка № 2. № производства по делу в суде1-110/2016
Коды субъекта РФ и суда
2.1 № лица в уголовном деле______________ 3. Регион 4. Суд ……. _________________________________
(выгружается автоматизировано из ПИ СДП и ПИ АМИРС)
5. Судья ……….. 6. ФамилияИванов Имя Иван Отчество Иванович
ФИО подсудимого
7. Всего привлечено судом лиц по делу 7.1 Орган предварительного расследования, направивший дело в суд ___________________________________ _
(с 01.01.2016)
Раздел 1. СВЕДЕНИЯ О ПОДСУДИМОМ (на момент совершения преступления, при совокупности – по наиболее тяжкому)

------ Вот примерно так выглядит файл ворда в котором нужно найти слово - Фамилия, распознать что за фамилия и записать эту фамилию в таблицу (Grids), так же с Именем, Отч и т.д( Не смогла загрузить вордовский документ, поэтому так скопировала ворд).
Вот и не получается считывать информацию из файла, получается только по названию файла записывает в таблицу.
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 15.11.2016, 11:24   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В doc есть текст "Букашка данные букашки Таракашка". Нужно прочитать текст между "Букашка" и "Таракашка". Направление примерно такое, упрощенно
Код:
procedure TForm1.Button2Click(Sender: TObject);
const wdDoNotSaveChanges = 0;
var WordApplication: OLEVariant;
    StartPosintion,EndPosintion: TPoint;
    FindText: String;
function FindTextInWord(Text: String; var Posintion: TPoint): Boolean;
begin
  try
    WordApplication.Selection.End:=0;
    WordApplication.Selection.Start:=0;
    WordApplication.Selection.Find.Forward:=True;
    WordApplication.Selection.Find.Text:=Text;
    Result:=WordApplication.Selection.Find.Execute;
    if Result then begin
      Posintion.X:=WordApplication.Selection.Start;
      Posintion.Y:=WordApplication.Selection.End;
    end;
  except
    Result:=False;
  end;
end;
begin
  try
    WordApplication:=CreateOLEObject('Word.Application');
  except
    ShowMessage('MS Word не установлен');
    Exit;
  end;
  try
    WordApplication.Visible:=False;
    try
      WordApplication.Documents.Open('e:\Абц.doc');
    except
      ShowMessage('Ошибка открытия файла');
      Exit;
    end;
    try
      if not FindTextInWord('Букашка',StartPosintion) then begin
        ShowMessage('Букашка не найдена');
        Exit;
      end;
      if not FindTextInWord('Таракашка',EndPosintion) then begin
        ShowMessage('Таракашка не найдена');
        Exit;
      end;
      if StartPosintion.Y>EndPosintion.X then begin
        ShowMessage('Таракашка раньше букашки');
        Exit;
      end;
      WordApplication.Selection.Start:=StartPosintion.Y;
      WordApplication.Selection.End:=EndPosintion.X;
      FindText:=Trim(WordApplication.Selection.Text);
      Memo2.Lines.Add(FindText); //Прочитнный текст
    finally
      WordApplication.ActiveDocument.Close(wdDoNotSaveChanges);
    end;
  finally
    WordApplication.Quit;
    WordApplication:=Unassigned;
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.11.2016 в 11:37.
Аватар вне форума Ответить с цитированием
Старый 16.11.2016, 07:38   #5
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию

Спасибо!
А в ворде не нужно никакие закладки закреплять?!
У меня будет большое количество Word-документов загружаться в программу, а программа должна понимать, что после слова Фамилия, потом после Имя и т.д. необходимо считывать информацию и записывать в таблицу на форме Делфи, весь список ФИО и номеров.


Цитата:
Сообщение от Аватар Посмотреть сообщение
В doc есть текст "Букашка данные букашки Таракашка". Нужно прочитать текст между "Букашка" и "Таракашка". Направление примерно такое, упрощенно
Код:
procedure TForm1.Button2Click(Sender: TObject);
....
end;

_______________
НЕ злоупотребляйте излишним цитированием!
Это нарушение называется overquoting (оверквотинг)
Удаляйте из цитаты лишний текст (без которого ваш ответ не теряет смысла и понятен)!

Модератор.


Последний раз редактировалось Serge_Bliznykov; 16.11.2016 в 08:21.
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 16.11.2016, 10:06   #6
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию

Цитата:
Сообщение от Replicant Посмотреть сообщение
Для того чтобы выкусить эти данные из текста, необходимо знать структуру файла, для того чтобы задать критерии поиска. Где конкретно в файле хранятся эти данные (я так понял речь не о разделе "подробно" автор файла и т. д.)? Все файлы структурированы по одному принципу? Пример файла в студию.

Вот так выглядит карточка из которой должна считаться информация.
И прикреплен ниже приблизительный пример, как должна работать программа.
Изображения
Тип файла: jpg алг2.JPG (32.2 Кб, 148 просмотров)
Вложения
Тип файла: doc Документ Microsoft Word.doc (68.5 Кб, 13 просмотров)
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 16.11.2016, 11:15   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Номер дела можно искать между текстом № производства по делу в суде и Коды субъекта РФ и суда. Дальше 6. Фамилия и Имя. И начинаются проблемы. Вдруг в фамилии есть сочетание Имя. Мало ли, почему бы не быть фамилии Имяреков. Короче нужно анализировать, использовать поиск не по всему документу как в примере, а с заданной позиции например
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна программа для считывания данных с сайта kolomna Фриланс 6 18.09.2015 10:12
Автополучение данных для БД из Word manafozavr Microsoft Office Access 3 20.10.2011 10:35
программка для построения графиков тригонометрических функций sin cos tg ctg [delphi] Николай.А Помощь студентам 3 06.10.2011 08:46
Разместить базу данных в интернете и подключатся для считывания s_stalk БД в Delphi 5 30.01.2011 10:05
считывания данных с TCP/IP kyc0k Помощь студентам 1 08.04.2008 11:45