Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > StringGrid в Excel


Автор: Alkor135 5.6.2009, 22:01
Нашел вот такую функцию, которая сохраняет StringGrig в Excel :
Код

function SaveAsExcelFile(stringGrid: TstringGrid; FileName: string): Boolean;
const
  xlWBATWorksheet = -4167;
var
  Row, Col: Integer;
  GridPrevFile: string;
  XLApp, Sheet: OLEVariant;
begin
  Result := False;
  XLApp  := CreateOleObject('Excel.Application'); // создаём OLE объект... т.е. открываем эксель
  try
    XLApp.Visible := False; // Окно экселя делаем невидимым... там быстрее работает
    XLApp.Workbooks.Add(xlWBatWorkSheet); // создаём документ
    Sheet      := XLApp.Workbooks[1].WorkSheets[1]; // переменная sheet означает первый лист созданного нами документа
    Sheet.Name := 'My Sheet Name'; // меняем имя листа
    for col := 0 to stringGrid.ColCount - 1 do
      for row := 0 to stringGrid.RowCount - 1 do
        Sheet.Cells[row + 1, col + 1] := stringGrid.Cells[col, row]; // заполняем ячейки в экселе значениями из stringgrid'а
    try
      XLApp.Workbooks[1].SaveAs(FileName); // сохраняем файл
      Result := True;
    except
      // Error ?
    end;
  finally
    if not VarIsEmpty(XLApp) then // если xlapp что-то присвоено
    begin
      XLApp.DisplayAlerts := False; // не показывать всякие предупреждения (например вопрос о сохранении файла)
      XLApp.Quit; // закрыть эксель
      XLAPP := Unassigned;  // и забываем переменные
      Sheet := Unassigned;
    end;
  end;
end;


Когда ее вставляю в программу, Delphi ругается, что незадекларированные индентификаторы:
Undeclared identifier 'CreateOleObject'
Undeclared identifier 'Worksheets'
Undeclared identifier 'SaveAs'

Подскажите как мне их задекларировать?

Автор: kami 5.6.2009, 22:18
Ставим курсор на функцию CreateOLEObject, нажимаем F1
Получаем, что в uses нужно прописать модуль ComObj.

Автор: Alkor135 6.6.2009, 04:47
Цитата(kami @ 5.6.2009,  22:18)
Ставим курсор на функцию CreateOLEObject, нажимаем F1
Получаем, что в uses нужно прописать модуль ComObj.

По ComObj нашел.
А вот для 'Worksheets' и 'SaveAs' ничего не понял.
Подскажите плиз.

Автор: kami 6.6.2009, 08:28
Цитата(Alkor135 @  6.6.2009,  04:47 Найти цитируемый пост)
А вот для 'Worksheets' и 'SaveAs' ничего не понял.

В смысле?
После добавления в uses пример должен был нормально откомпилироваться, это ж вариантные переменные.

Автор: Alkor135 6.6.2009, 11:58
Цитата(kami @ 6.6.2009,  08:28)
Цитата(Alkor135 @  6.6.2009,  04:47 Найти цитируемый пост)
А вот для 'Worksheets' и 'SaveAs' ничего не понял.

В смысле?
После добавления в uses пример должен был нормально откомпилироваться, это ж вариантные переменные.

Точно, компилится нормально.
А ошибки показывает.
Почему?
http://smages.com/

Автор: kami 6.6.2009, 12:04
Цитата(Alkor135 @  6.6.2009,  11:58 Найти цитируемый пост)
Точно, компилится нормально.А ошибки показывает.

Теперь я ничего не понял.
Так компилируется, или показывает ошибки?
Если Delphi считает, что в коде синтаксическая ошибка, то компилировать откажется.

Автор: Alkor135 6.6.2009, 12:35
Цитата(kami @ 6.6.2009,  12:04)
Цитата(Alkor135 @  6.6.2009,  11:58 Найти цитируемый пост)
Точно, компилится нормально.А ошибки показывает.

Теперь я ничего не понял.
Так компилируется, или показывает ошибки?
Если Delphi считает, что в коде синтаксическая ошибка, то компилировать откажется.

При компиляции ошибок не показывает.
И файл создает прекрасно. 
Ошибки только те, что на скриншоте.
А вобщем спасибо, ведь все работает.

Автор: Данкинг 6.6.2009, 12:42
Юзай Дельфи 7.0 и не парься. Там всё отлично работает. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)