Одесса: 4°С (вода 9°С)
Киев: 0°С
Львов: 6°С

Тема: Вопрос по Делфи 2006

Ответить в теме
Показано с 1 по 2 из 2
  1. Вверх #1
    Новичок Аватар для Black_Joker
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    30
    Сообщений
    66
    Репутация
    20

    По умолчанию Вопрос по Делфи 2006

    Мне нужно открыть существующий файлик экселя, считать в нём с определённого листа определённые ячейки и вывести их в стринггрид и попутно записать в текстовый файл. Скажите пожалуйста как это можно сделать, а лучше с примером кода, если не сложно.
    Буду очень благодарен.
    Последний раз редактировалось Black_Joker; 11.04.2008 в 23:55.


  2. Вверх #2
    User banned
    Пол
    Мужской
    Адрес
    Brisbane
    Сообщений
    2,009
    Репутация
    401
    Записей в дневнике
    1
    Код:
    uses
      ComObj;
    
    function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
    const
      xlCellTypeLastCell = $0000000B;
    var
      XLApp, Sheet: OLEVariant;
      RangeMatrix: Variant;
      x, y, k, r: Integer;
    begin
      Result := False;
      // создаем  Excel-OLE обьект
      XLApp := CreateOleObject('Excel.Application');
      try
        // Прячем Excel
        XLApp.Visible := False;
    
        // Открываем Workbook
        XLApp.Workbooks.Open(AXLSFile);
    
        // Sheet := XLApp.Workbooks[1].WorkSheets[1];
        Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
    
        // Активируем последнюю незанятую клетку чтобы узнать кол-во столбцов и строк
        
        Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
        // Номер последнего ряда
        x := XLApp.ActiveCell.Row;
        // Номер последней колонки
        y := XLApp.ActiveCell.Column;
    
        // Ставим размеры грида
    
        AGrid.RowCount := x;
        AGrid.ColCount := y;
    
        // Конвертируем Variant связанный с WorkSheet в Delphi Variant
    
        RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
        //  Цикл заполнения TStringGrid
        k := 1;
        repeat
          for r := 1 to y do
            AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
          Inc(k, 1);
          AGrid.RowCount := k + 1;
        until k > x;
        // Подчищаем
        RangeMatrix := Unassigned;
    
      finally
        // Закрываем Excel
        if not VarIsEmpty(XLApp) then
        begin
          // XLApp.DisplayAlerts := False;
          XLApp.Quit;
          XLAPP := Unassigned;
          Sheet := Unassigned;
          Result := True;
        end;
      end;
    end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Xls_To_StringGrid(StringGrid1, 'C:\Table1.xls') then
        ShowMessage('Table has been exported!');
    end;

Ответить в теме

Похожие темы

  1. ЛИГА ЧЕМПИОНОВ, сезон 2005/2006
    от ~Goblin~ в разделе Спорт
    Ответов: 66
    Последнее сообщение: 18.05.2006, 16:32
  2. Ответов: 7
    Последнее сообщение: 24.12.2005, 01:14
  3. ВЫБОРЫ 2006.Грязи уже по самые не-могу..
    от cape в разделе Политика
    Ответов: 255
    Последнее сообщение: 30.11.2005, 12:01
  4. Кубок УЕФА сезон 205-2006
    от ~Goblin~ в разделе Спорт
    Ответов: 15
    Последнее сообщение: 20.08.2005, 02:41
  5. Евровидение 2006
    от Dimichhh в разделе Музыка
    Ответов: 45
    Последнее сообщение: 02.06.2005, 16:14

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения