![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Старожил
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 21.04.2006
Адрес: Антильские о-ва
Сообщений: 1,290
|
Есть код на Делфи
Код:
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
Или можт чёто в реестре прописать чтоб при обращении к екселю он переобращался к Калку? Меня и такое устроит. Последний раз редактировалось DjAnubis; 09.09.2013 в 17:41.. |
|
|
|
| Реклама: | Заходите на сайт MebelStol.ru: готовые кухни купить в москве - отличные цены и большой выбор! | прокат пледа | хлорное золото | Клапан Esbe 3F 125-280 (11101400) | стол угловой письменный |
|
|
#2
|
|
Неактивный пользователь
Пол:
Регистрация: 10.01.2008
Сообщений: 8
Репутация: 2
|
Немного не понятно, что значит работать с 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 {код};
Код:
{ФУНКЦИЯ ФОРМИРОВАНИЯ ПАРАМЕТРОВ}
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.. |
|
|
|
|
|
#3
|
|
Старожил
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 21.04.2006
Адрес: Антильские о-ва
Сообщений: 1,290
|
Чувак, ты молоток! Спасибо огромное.
Буду искать сохранение. |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| 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 |
|
|