Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как экспортировать таблицу из MS Word в TStringGrid

Delphi , Технологии , OLE Automation MSOffice

Как экспортировать таблицу из MS Word в TStringGrid

Автор: http://www.swissdelphicenter.ch

uses
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
const
  AWordDoc = 'C:\xyz\testTable.doc';
var
  MSWord, Table: OLEVariant;
  iRows, iCols, iGridRows, jGridCols, iNumTables, iTableChosen: Integer;
  CellText: string;
  InputString: string;
begin
  try
    MSWord := CreateOleObject('Word.Application');
  except
    // Error....
    Exit;
  end;

  try
    MSWord.Visible := False;
    MSWord.Documents.Open(AWordDoc);

    // Get number of tables in document
    iNumTables := MSWord.ActiveDocument.Tables.Count;

    InputString := InputBox(IntToStr(iNumTables) +
      ' Tables in Word Document', 'Please Enter Table Number', '1');
    // Todo: Validate string for integer, range...
    iTableChosen := StrToInt(InputString);

    // access table
    Table := MSWord.ActiveDocument.Tables.Item(iTableChosen);
    // get dimensions of table
    iCols := Table.Rows.Count;
    iRows := Table.Columns.Count;
    // adjust stringgrid columns
    StringGrid1.RowCount := iCols;
    StringGrid1.ColCount := iRows + 1;

    // loop through cells
    for iGridRows := 1 to iRows do
      for jGridCols := 1 to iCols do
      begin
        CellText := Table.Cell(jGridCols, iGridRows).Range.FormattedText;
        if not VarisEmpty(CellText) then
        begin
          // Remove Tabs
          CellText := StringReplace(CellText,
            #0$D,'', [rfReplaceAll]);
          // Remove linebreaks
          CellText := StringReplace(CellText, #0$7,'', [rfReplaceAll]);

          // fill Stringgrid
          Stringgrid1.Cells[iGridRows, jGridCols] := CellText;
        end;
      end;
    //..
  finally
    MSWord.Quit;
  end;
end;

Перевод контента на русский язык:

Код предназначен для экспорта таблицы из файле Microsoft Word (.doc) в компонент TStringGrid в Delphi. Вот как он работает:

  1. Код использует unit ComObj для создания экземпляра приложения Word и открытия указанного документа.
  2. Он получает количество таблиц в документе, спрашивает пользователя выбрать которую таблицу экспортировать, и затем открывает эту таблицу.
  3. Код then iterates through each cell in the table, extracts the text from the cell (ignoring any tabs or line breaks), and places it into a TStringGrid component.

Вот некоторые улучшения, которые вы можете сделать:

  • Вместо использования InputBox для ввода пользователя,consider using a more robust UI control like a TComboBox или TEdit.
  • Вы можете добавить обработку ошибок вокруг вызова CreateOleObject в случае, если Word не установлен на системе.
  • Код предполагает, что таблица имеет только одну строку заголовков. Если у вас есть таблицы с несколькими строками заголовков, вам нужно будет изменить код соответствующим образом.
  • Вы также можете улучшить производительность, batch-обновляя обновления TStringGrid component вместо обновления каждого ячейки индивидуально.

Вот альтернативное решение с использованием unit ole2string, которое предоставляет более эффективный способ конвертирования документов Office в строки:

uses
  ole2string;
...
procedure TForm1.Button1Click(Sender: TObject);
const
  AWordDoc = 'C:\xyz\testTable.doc';
var
  MSWord, Table: OLEVariant;
  CellText: string;
begin
  try
    MSWord := CreateOleObject('Word.Application');
    MSWord.Visible := False;
    MSWord.Documents.Open(AWordDoc);

    // Get the table
    Table := MSWord.ActiveDocument.Tables.Item(1);

    // Convert the table to a string
    CellText := ole2string(Table.Range.Text);

    // Split the string into rows
    CellText := StringReplace(CellText, #13#10, ';', [rfReplaceAll]);

    // Split each row into columns
    CellText := StringReplace(CellText, ';', #9, [rfReplaceAll]);

    // Fill the TStringGrid component
    StringGrid1.Cells := SplitString(CellText, #9);

  finally
    MSWord.Quit;
  end;
end;

Этот код короче и более эффективен, чем оригинальный код. Он использует unit ole2string для конвертации таблицы в строку, которая затем может быть разделена на строки и столбцы с помощью функции StringReplace. Результатом является заполнение компонентом TStringGrid ячейками текста.

Представлен пример кода на Delphi, который экспортирует таблицу из файла Microsoft Word в компонент TStringGrid.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE Automation MSOffice ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:03:40/0.0057499408721924/1