|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Быстродействие при работе с Word' ом
Уважаемые программисты, помогите пожалуйста с решением проблемы. Я написал программу, которая читает данные типа integer из таблицы построенной в MsWord.Открываю файл так:
Код:
Var Cadr: integer = 100; //ПРОЦЕДУРА ЧТЕНИЯ ФАЙЛА procedure TForm1.Button1Click(Sender: TObject); begin try //СОЗДАЁМ ДОКУМЕНТ WORD MsWord:=CreateOleObject('Word.Application'); except begin Form1.Memo1.Font.Color:=clRed; Form1.Memo1.Lines.Add('MsWord не установлен.'); end; end; MsWord.Visible:=false;//ДЕЛАЕМ ЕГО НЕВИДИМЫМ MsWord.Documents.Open(Edit2.Text);//ОТКРЫВАЕМ ФАЙЛ //РАЗРЕШАЕМ РАБОТУ С ТАБЛИЦЕЙ DataTable := MsWord.ActiveDocument.Tables.Item(1); Rows := DataTable.Rows.Count;//НАЙДЁМ КОЛИЧЕСТВО СТРОК ВООБЩЕ if Rows > 100 then//ЕСТЬ ЛИ СМЫСЛ ЧИТАТЬ ВСЁ?! begin for x:=1 to Cadr do begin Form1.Button4.Enabled:=false; Form1.Button5.Enabled:=true; for y:=1 to 7 do begin //ЧИТАЕМ DataRead1[y] := VarToStr(datatable.cell(x+1,y+2). range.formattedtext); //ПРЕОБРАЗОВЫВАЕМ В ТИП integer Val(DataRead1[y], DataRead2[y], Code); //ВЫВОДИМ ДАННЫЕ В ГРАФИКЕ Form1.Chart1.Series[y-1].Add(DataRead2[y]); end; end; end else begin for x:=1 to Rows do//ЕСЛИ СТРОК МЕНЬШЕ 100, ЧИТАЕМ ВСЁ begin Form1.Button4.Enabled:=false; Form1.Button5.Enabled:=false; for y:=1 to 7 do begin //ЧИТАЕМ DataRead1[y] := VarToStr(datatable.cell(x+1,y+2). range.formattedtext); //ПРЕОБРАЗОВЫВАЕМ В ТИП integer Val(DataRead1[y], DataRead2[y], Code); //ВЫВОДИМ ДАННЫЕ В ГРАФИКЕ Form1.Chart1.Series[y-1].Add(DataRead2[y]); end; end; end; end; Сотня строк файла читаются за полторы секунды. Но для того чтобы прочитать следующие сто строк от другой кнопки требуется около 5-ти минут, хотя код такой-же. procedure TForm1.Button5Click(Sender: TObject); begin if Counter=0 then Form1.Button4.Enabled:=false; Counter:=Counter+1; Form1.Button4.Enabled:=true; //РАЗРЕШАЕМ РАБОТУ С ТАБЛИЦЕЙ DataTable := MsWord.ActiveDocument.Tables.Item(1); for x := Cadr to Cadr + Cadr do//РАЗМЕР КАДРА ЧТЕНИЯ begin for y:=1 to 7 do begin //ЧИТАЕМ ОШИБКА? -----> DataRead1[y] := VarToStr(DataTable.Cell(x+1,y+2). Range.FormattedText); //ПРЕОБРАЗОВЫВАЕМ В ТИП integer Val(DataRead1[y], DataRead2[y], Code); //ВЫВОДИМ ДАННЫЕ В ГРАФИКЕ Form1.Chart1.Series[y-1].Add(DataRead2[y]); end; end; Cadr := Cadr + 50;//УВЕЛИЧИВАЕМ ЗОНУ ПРОСМОТРА end; Я пробовал отключать строку VarToStr(DataTable.Cell(x+1,y+2).Range.FormattedTe xt); и скорость существенно повысилась. Но почему происходит такое резкое замедление скорости, я понять не могу. Помогите пожалуйста. Спасибо. Последний раз редактировалось Admin, 26.12.2011 в 15:13. |