Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование макросов из Delphi, запуск макроса Excel из delphi 
V
    Опции темы
CrazyKittie
Дата 11.1.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Господа программисты, помогите пожалуйста с таким вопросом:
Необходимо реализовать запуск Excel макроса из приложения Delphi. Програмка выполняет экспорт данных в Эксель, код приведен ниже. Какждый раз при экспорте создается эксель файл, куда заносятся данные. Был написан макрос в Экселе по работе с экспортированными данными, необходимо осуществить запуск этого макроса из приложения delphi
Код экспорта:
Код

function RefToCell(ARow, ACol: Integer): string;
 begin
   Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
 end;

 function SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
 const
   xlWBATWorksheet = -4167;
 var
   Row, Col: Integer;
   GridPrevFile: string;
   XLApp, Sheet, Data: OLEVariant;
   i, j: Integer;
 begin
     Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
   for i := 0 to AGrid.ColCount - 1 do
     for j := 0 to AGrid.RowCount - 1 do
       Data[j + 1, i + 1] := AGrid.Cells[i, j];
    Result := False;
   XLApp := CreateOleObject('Excel.Application');
   try
         XLApp.Visible := False;
         XLApp.Workbooks.Add(xlWBatWorkSheet);
     Sheet := XLApp.Workbooks[1].WorkSheets[1];
     Sheet.Name := ASheetName;
         Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
       AGrid.ColCount)].Value := Data;
         try
       XLApp.Workbooks[1].SaveAs(AFileName);
       Result := True;
     except
          end;
   finally
        if not VarIsEmpty(XLApp) then
     begin
       XLApp.DisplayAlerts := False;
       XLApp.Quit;
       XLAPP := Unassigned;
       Sheet := Unassigned;
     end;
   end;
 end;


procedure TfrmAnalysis.Button1Click(Sender: TObject);
begin
if SaveAsExcelFile(SGD[1], 'My Stringgrid Data', 'c:\MyExcelFile.xls') then
     ShowMessage('StringGrid saved!');
end;

P.S. не подскажете, как задать тип ячеек числовой при экспортировании?
PM MAIL   Вверх
Данкинг
Дата 11.1.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Код

XLApp.Run('название макроса');




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Rrader
  Дата 11.1.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



В Run ещё можно параметры передавать

Цитата(CrazyKittie @  11.1.2010,  20:55 Найти цитируемый пост)
P.S. не подскажете, как задать тип ячеек числовой при экспортировании? 

Заведите промежуточную переменную
Код

..
 const
   xlWBATWorksheet = -4167;
   xlThousandsSeparator = 4;
   xlDecimalSeparator = 3;
   xlCurrencyDigits =  27;
 var
   DataRange: OleVariant;
..
   try
     XLApp.Visible := False;
     XLApp.Workbooks.Add(xlWBatWorkSheet);
     Sheet := XLApp.Workbooks[1].WorkSheets[1];
     Sheet.Name := ASheetName;
     DataRange := Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
       AGrid.ColCount)];
     DataRange.Value := Data;
     DataRange.NumberFormat := Format('#%s##0%s%s', [XLApp.International[
       xlThousandsSeparator], XLApp.International[xlDecimalSeparator],
       StringOfChar('0', Integer(XLApp.International[xlCurrencyDigits]))]);
..


Это сообщение отредактировал(а) Rrader - 11.1.2010, 16:29


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Данкинг
Дата 11.1.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(Rrader @  11.1.2010,  16:07 Найти цитируемый пост)
Заведите промежуточную переменную

А зачем? NumberFormat:='@'; же просто.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Rrader
  Дата 11.1.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



Цитата(Данкинг @  11.1.2010,  23:58 Найти цитируемый пост)
NumberFormat:='@';

Без опций


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
CrazyKittie
Дата 12.1.2010, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Спасибо огромное, господа программисты
PM MAIL   Вверх
MinMax
Дата 28.1.2010, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



 Доброго времени суток! Подскажите, пожалуйста, с проблемой - имеется такая же задача экспорта из stringGrid в Excel, как можно при экспорте поменять формат значения ячейки из текстового в числовой? Или возможно это лучше сделать сначала в StringGride? Проблема с числами типа "1,87" - Excel из-за запятой воспринимает значение как текстовое, а нужна таблица с числами.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1099 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.