Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > Компьютеры и Интернет > Скорая помощь

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 09.09.2013, 17:20   #1
Старожил
 
Пол:Мужской
Регистрация: 21.04.2006
Адрес: Антильские о-ва
Сообщений: 1,290
Exclamation Delphi + Excel => Delphi + Calc

Есть код на Делфи
Код:
procedure TForm2.btnIntoExcelClick(Sender: TObject);
var
 Excel, WorkBook, Sheet: Variant;
 i,j,Count,RC:Integer;
 SaveTo:string;
begin
 btnIntoExcel.Enabled:=False;
 if SaveDialog1.Execute then SaveTo:=SaveDialog1.FileName;
 Excel := CreateOleObject('Excel.Application');
 Excel.SheetsInNewWorkbook :=1;
 WorkBook := Excel.WorkBooks.Add;
 Excel.Visible:=True;
 WorkBook := Excel.WorkBooks.Item[1];
 Sheet := Workbook.Sheets.Item[1];
 Count:=Form2.Tag;
 RC:=Form2.StringGrid1.RowCount-1;
 Sheet.Range[Sheet.Cells[1,1],Sheet.Cells[Count,3]].ClearContents;
 Sheet.Range[Sheet.Cells[1,1],Sheet.Cells[Count,2]].NumberFormat:= '@';
 Sheet.Range[Sheet.Cells[1,3],Sheet.Cells[Count,3]].NumberFormat:='# ##0,00';
  for i:=1 to RC do
    for j:=1 to 2 do
     begin
      Application.ProcessMessages;
      Sheet.Cells.Item[i,j].Value2:=Form2.StringGrid1.Cells[j,i];
     end; //end for j
 for i:=1 to RC do
     begin
      Application.ProcessMessages;
      Sheet.Cells.Item[i,3].Value2:=StrToFloat(Form2.StringGrid1.Cells[3,i]);
     end; //end for j
 Excel.DisplayAlerts:=False;
 Excel.ActiveWorkbook.SaveAs(SaveTo);
 Excel.Quit;
 Excel:=Unassigned;
end; // end proc
Нужно бы заставить его работать с ОпенОфффисным Calc-ом. Помогите кто может.

Или можт чёто в реестре прописать чтоб при обращении к екселю он переобращался к Калку? Меня и такое устроит.

Последний раз редактировалось DjAnubis; 09.09.2013 в 17:41..
DjAnubis вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Заходите на сайт MebelStol.ru: готовые кухни купить в москве - отличные цены и большой выбор!прокат пледахлорное золотоКлапан Esbe 3F 125-280 (11101400)стол угловой письменный


Старый 11.09.2013, 01:41   #2
YuKa2000
Неактивный пользователь
 
Пол:Мужской
Регистрация: 10.01.2008
Сообщений: 8
Репутация: 2
По умолчанию Re: Delphi + Excel => Delphi + Calc

Немного не понятно, что значит работать с Calc-ом?
1. Пересохранить созданный *.xls в формате *.ods?
2. Просто открыть созданный *.xls в OO Calc?
3. Или же создавать с "нуля" в Calc?

1. Можно открыть файл в OO Calc (LoadComponentFromURL) и сохранить его (StoreToURL).
2. Да можно через реестр назначить для файлов xls программу Calc по-умолчанию и сохраненный файл будет открываться в Calc.
Но все это будет бесполезно, если установлен только OpenOffice.
3. Изменить код.

И еще, в качестве небольшого замечания - желательна проверка установленных как Excel, так и OO. Например, с помощью функции:
Код:
{УСТАНОВЛЕНО ЛИ ПРИЛОЖЕНИЕ}
function IsAppl(nApp: String): boolean;
var
  ClassID: TCLSID;
  Rez : HRESULT;
begin
  Rez := CLSIDFromProgID(PWideChar(WideString(nApp)), ClassID);
  if Rez = S_OK then
    result := true
  else
    result := false;
end;
Вызов:
Код:
if IsAppl('Excel.Application') then {код};
if IsAppl('com.sun.star.ServiceManager') then {код};
По п.3 алгоритм примерно такой:
Код:
{ФУНКЦИЯ ФОРМИРОВАНИЯ ПАРАМЕТРОВ}
function MakePV(ServiceManager:variant;PropertyName:string;PropertyValue:variant):variant;
begin
  Result:=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Result.Name:=PropertyName;
  Result.Value:=PropertyValue;
end;

//======

//Подключаемся к запущенному OO или создаем новый
StarOffice := CreateOleObject('com.sun.star.ServiceManager');

//Получаем рабочую область
Desktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');

//Создаем документ
SM := CreateOleObject('com.sun.star.ServiceManager');
Ar:=VarArrayCreate([0,0],varVariant);
Ar[0] := MakePV(SM,'Hidden',false);
Document := Desktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0, Ar);

//Получаем листы
Sheets := Document.GetSheets;

//Получаем первый лист
Sheet := Sheets.getByIndex(0);

//Получаем интерфейс Dispatch
ooDispatch := StarOffice.createInstance('com.sun.star.frame.DispatchHelper');

//Получаем Область Документа
ooFrame := Document.CurrentController.Frame;

//А далее уже работа с ячейками и с документом
Sheet.getCellRangeByPosition(1,1,Count,3).ClearContents(16);
...
Sheet.getCellByPosition(i-1,j-1).Value := StringGrid1.Cells[j,i];
...
С форматом ячеек сложнее, но в интернете обсуждений много. Как собственно и с сохранением в файл.

Все переменные типа Variant. Для ранних ОО (до версии 1.1.4) алгоритм работы кое-где отличается, поэтому, если есть необходимость можно проверять версию и писать разный код.

Последний раз редактировалось YuKa2000; 11.09.2013 в 01:50..
YuKa2000 вне форума
 
Ответить с цитированием Вверх
Старый 11.09.2013, 18:43   #3
DjAnubis
Старожил
 
Пол:Мужской
Регистрация: 21.04.2006
Адрес: Антильские о-ва
Сообщений: 1,290
По умолчанию Re: Delphi + Excel => Delphi + Calc

Чувак, ты молоток! Спасибо огромное.
Буду искать сохранение.
DjAnubis вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7 Vinni_incorp Delphi 41 05.03.2011 18:41
Castalia for Delphi 2008.1 - эксперт IDE Delphi Minotawr Компоненты 0 03.09.2008 01:17
Delphi КириллK Архив 5 10.07.2007 18:03
Excel внутри MDI-child окна приложения Delphi hbond Delphi 1 04.07.2007 13:17
Delphi+PHP plahmonah Delphi 1 08.04.2007 20:43

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 08:32. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.04527 секунды с 11 запросами