Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с EXCEL, Как правельно работать с EXCEL 
:(
    Опции темы
BOB4uK
  Дата 28.2.2004, 07:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











baaa.gif Кто-нибудь знает как работать с EXCEL, что бы не вылетало времяот времени сообщение об ошибке "Сервер RPC не доступен" или "OLE error #(код не помню)"?
  Вверх
Kesh
Дата 28.2.2004, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



У меня такое бывало только при раннем связывании, при позднем - все OK


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
BOB4uK
Дата 28.2.2004, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понимаешь Kesh я был бы тебе презнателен, если бы ты мне подсказал как этого избежать (ЛЮБЫМИ СПОСОБАМИ) я на жертвах не скуплюсь!!!
PM MAIL ICQ   Вверх
Kesh
Дата 29.2.2004, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Ну вот тебе примерчик, у меня WinXP+OfficeXP работает без ошибок... Если надо, скину на мыло всю программку...
Код
unit k_excel;

interface
Uses SysUtils, Windows, OleServer, Excel2000, main, ActiveX, forms, OleCtrls,
    ClipBrd, Variants;

const
 xlLCID = LOCALE_USER_DEFAULT;

var
 Excel: Excel2000.TExcelApplication;
 WorkBook: Excel2000._WorkBook;
 WorkSheet: Excel2000._WorkSheet;

procedure StartExcel;
procedure ShowExcel;
procedure HideExcel;
procedure CloseExcel;
procedure OpenExistingWorkBook(FileName: String);
procedure CloseWorkBook(FileToSaveName: String);
procedure ExportStartData;
procedure ExportNormalData;

implementation

Uses Utils;

procedure StartExcel;
var
 NewInstance: boolean;
begin
 NewInstance := true;
 Excel := TExcelApplication.Create(frmMain);
 if NewInstance
   then Excel.ConnectKind := ckNewInstance
   else Excel.ConnectKind := ckRunningOrNew;
 Excel.Connect;
end;

procedure ShowExcel;
begin
 if Assigned(Excel)
   then
     begin
       Excel.Visible[xlLCID] := true;
       if (Excel.WindowState[xlLCID] = TOleEnum(xlMinimized))
         then Excel.WindowState[xlLCID] := TOleEnum(xlNormal);
       Excel.ScreenUpdating[xlLCID] := true
     end;
end;

procedure HideExcel;
begin
 if Assigned(Excel)
   then Excel.Visible[xlLCID] := false
end;

procedure CloseExcel;
begin
 if Assigned(Excel)
   then
     begin
       if (Excel.Workbooks.Count>0) and (not Excel.Visible[xlLCID])
         then
           begin
             Excel.WindowState[xlLCID] := TOleEnum(xlMinimized);
             Excel.Visible[xlLCID] := true;
             Application.BringToFront
           end
         else Excel.Quit;
       FreeAndNil(Excel)
     end
end;

procedure OpenExistingWorkBook(FileName: String);
begin
 WorkBook := Excel.Workbooks.Open(FileName,EmptyParam,EmptyParam,EmptyParam,
                                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                  false,xlLCID);
end;

procedure CloseWorkBook(FileToSaveName: String);
var
 SaveChanges: boolean;
begin
 SaveChanges:=false;
 WorkBook.SaveCopyAs(FileToSaveName,xlLCID);
 WorkBook.Close(SaveChanges,EmptyParam,EmptyParam,xlLCID);
end;

procedure ExportStartData;
var
 i: integer;
 Buff: String;
 C: TClipBoard;
begin
 C := TClipboard.Create;
 Buff := '';
 WorkSheet := WorkBook.Worksheets.Item['Исходные данные'] as Excel2000._WorkSheet;
 for i := 0 to High(FirstExpert) do
   begin
     Buff := Buff + FloatToStr(FirstExpert[i]) + #9 + FloatToStr(SecondExpert[i]) + #9 + FloatToStr(ThirdExpert[i]) + #9 + FloatToStr(MMG[i]) + #10;
     frmMain.Caption := Format('Экспорт исходных данных - %d%s выполнено',[Round(i*100/High(ND)),'%']);
   end;  
 Delete(Buff,Length(Buff),1);
 C.SetTextBuf(PChar(Buff));
 try
   WorkSheet.Cells.Item[1,1].PasteSpecial
 finally
   C.Clear;
   C.Free;
   WorkSheet := Nil
 end
end;

procedure ExportNormalData;
var
 i,j: integer;
 Buff: String;
 C: TClipBoard;
 TempArr: array of array[140..260] of real;
begin
 C := TClipboard.Create;
 WorkSheet := WorkBook.Worksheets.Item['Нормальное распределение'] as Excel2000._WorkSheet;
 SetLength(TempArr,N);
 for i := 0 to High(TempArr) do
   begin
     for j := 140 to 260 do
       TempArr[i,j] := GetNormalProbability(FirstExpert[i],SecondExpert[i],ThirdExpert[i],j*0.05,Sigma);
     frmMain.Caption := Format('Расчет нормального распределения - %d%s выполнено',[Round(i*100/High(ND)),'%']);
   end;
 for i := 0 to High(TempArr) do
   begin
     Buff := '';
     C.Clear;
     for j := 140 to 260 do Buff := Buff + FloatToStr(TempArr[i,j]) + #9;
     frmMain.Caption := Format('Экспорт данных по нормальному распределению - %d%s выполнено',[Round(i*100/High(ND)),'%']);
     Delete(Buff,Length(Buff),1);
     C.SetTextBuf(PChar(Buff));
     WorkSheet.Cells.Item[i+1,1].PasteSpecial;
   end;
 frmMain.Caption := 'Формирование отчета окончено';
 C.Clear;
 C.Free;
 WorkSheet := Nil
end;

end.



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Kesh
Дата 29.2.2004, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Ну или вот еще...
Код
procedure TfrmMain.MakeReport;
var
 i: byte;
begin
 try
   Excel := GetActiveOleObject('Excel.Application')
 except
   Excel := CreateOleObject('Excel.Application')
 end;
 FileName := GetCurrentDir+'\report.xls';
 Excel.WorkBooks.Open(FileName,False);
 Book := Excel.WorkBooks.Item[1];
 SheetMain := Book.Sheets.Item['Main'];
 SheetMain.Cells.Item[3,4].Value := VecToStr(Coeffs[0])+'->'+cbxMaxMin.Text;
 for i := 1 to LimitsCount do
   SheetMain.Cells.Item[3+i,4].Value := VecToStr(Coeffs[i])+
                                        sgLimits.Cells[0,i]+
                                        sgLimits.Cells[1,i];
 if BestVectorFound
   then
     begin
       SheetMain.Cells.Item[16,4].Value := VecToVecStr(GetArrayFromLongWord(BestVector));
       SheetMain.Cells.Item[17,4].Value := BestFunc;
     end
   else
     begin
       SheetMain.Cells.Item[16,4].Value := 'не найден';
       SheetMain.Cells.Item[17,4].Value := 'невозможно определить';
     end;
 for i := 1 to NumOfGoodVectors do
     if odd(i)
       then
         begin
           SheetMain.Cells.Item[i+19,1].Value := Format('№%d',[i]);
           SheetMain.Cells.Item[i+19,2].Value := VecToVecStr(GetArrayFromLongWord(GoodVectors[i]));
           SheetMain.Cells.Item[i+19,1].Interior.Color := RGB(153,204,255);
           SheetMain.Cells.Item[i+19,2].Interior.Color := RGB(153,204,255);
         end
       else
         begin
           SheetMain.Cells.Item[i+19,1].Value := Format('№%d',[i]);
           SheetMain.Cells.Item[i+19,2].Value := VecToVecStr(GetArrayFromLongWord(GoodVectors[i]));
           SheetMain.Cells.Item[i+19,1].Interior.Color := RGB(204,254,204);
           SheetMain.Cells.Item[i+19,2].Interior.Color := RGB(204,254,204);
         end;
 WorkTime := GetTiCkCount - WorkTime;
 SheetMain.Cells.Item[18,4].Value := Format('%g секунд',[WorkTime/1000]);
 Application.Minimize;
 Application.Restore;
 Excel.Visible := true;
 if Excel.WindowState=xlMinimized then Excel.WindowState := xlNormal;
 Excel.ScreenUpdating := true;
end;



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Kesh
Дата 29.2.2004, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Да, вот еще что на ум пришло... Ты в какой ОСИ пишешь?


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Гость_BOB4uK
Дата 5.3.2004, 19:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Kesh я работяю как ты WinXP+OfficeXP, но и то и то стоит без обнавлений! Может из-за этого, как ты думаешь?
  Вверх
Kesh
Дата 5.3.2004, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



У меня на XP SP1, а офис без паков...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Гость_BOB4uK
Дата 6.3.2004, 05:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Слушай Kesh может у меня железе глючное ( память или мать, видюха встроеная)?
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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