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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WordApplication, ExcelApplication, Работа с Word и Excel 
:(
    Опции темы
klyaksa
Дата 5.9.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albinos_x @  3.9.2010,  11:37 Найти цитируемый пост)
klyaksa, на какой строчке вылетает ошибка? приведи кусок кода.


При нажатии Нет выскакивает сообщение внизу.

Код

  SheetsInNewWB :=  5;

  ExcelApplication1.ConnectKind := ckNewInstance;
  ExcelApplication1.AutoQuit := True;
  ExcelApplication1.Visible[lcid] := False;
  ExcelApplication1.Connect;
  ExcelApplication1.SheetsInNewWorkbook[lcid] := SheetsInNewWB;
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,lcid)) ;


  for I := 1 to 5 do
  begin
        ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkbook.Sheets[I] as ExcelWorkSheet);
        Range := GetRange(ExcelWorksheet1, 1, 1, 1, 2);
        Range.MergeCells := True;
        Range.Value := 'ляллляляллялялялял';
        Range.Font.Bold := True;
  end;


  ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkbook.Sheets[1] as ExcelWorkSheet);
  ExcelApplication1.Visible[lcid] := True;
  ExcelWorksheet1.Activate;


    FileName := ConfigDirSaveReport +
      'лялял.dat';
    FileName := ChangeFileExt(FileName, '.xls');
    FileNameOle  := FileName;
    // сохраняем в формат *.xls - считаем что нам могут попасться только 2003 и 2007 офисы
    if (StrToInt(Copy(ExcelApplication1.Version[LOCALE_USER_DEFAULT],1,pos('.',ExcelApplication1.Version[LOCALE_USER_DEFAULT])-1)))=12 then
              Fileformat:=56          // для office 2007
              else
              Fileformat:=xlNormal;   // для Office 2003
    ExcelApplication1.ActiveWorkbook.SaveAs(FileNameOle, Fileformat, EmptyParam, EmptyParam,
                                         BoolOle, BoolOle, xlExclusive, EmptyParam,
                                         BoolOle, EmptyParam, EmptyParam, EmptyParam,
                                         LOCALE_USER_DEFAULT);


---------------------------
Debugger Exception Notification
---------------------------
Project MyReport.exe raised exception class EOleException with message 'OLE error 800A03EC'.
---------------------------
Break   Continue   Help   
---------------------------


PM MAIL   Вверх
Albinos_x
Дата 6.9.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



??? а  в каком месте здесь он у тебя спрашивает да или нет???? если делаешь SaveAs и все коректно передаешь, то ничего спрашивать не должен, дорлжен в тихую сохранить и все.
1. проверь корректные ли данные передаютя через FileNameOle серверу приложений
2. попробуй закомментить
Код
...
ExcelWorksheet1.Activate;
...

будет ли появляться данная ошибка?
3. переменная BoolOle задана?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
klyaksa
Дата 6.9.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

BoolOle    : OleVariant;


Если файл с таким именем существует, то из екзеля вываливаюсь в дельфи с сообщением выще на строчке
ExcelApplication1.ActiveWorkbook.SaveAs(FileNameOle, Fileformat, EmptyParam, EmptyParam,

Но это все из под дельфи, так то все гладко.
PM MAIL   Вверх
Albinos_x
Дата 7.9.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата(klyaksa @  6.9.2010,  17:15 Найти цитируемый пост)
Если файл с таким именем существует

хм... обычо в таких местах всталяю проверку:
Код

if FileExists(fileneme) then
   deletefile(filename);


Добавлено через 34 секунды
Цитата(klyaksa @  6.9.2010,  17:15 Найти цитируемый пост)
BoolOle    : OleVariant;

с типом то понятно... с другим не скомпелируется, значение какое?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
klyaksa
Дата 7.9.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albinos_x @  7.9.2010,  14:17 Найти цитируемый пост)
if FileExists(fileneme) then   deletefile(filename);

Зачем?  smile Это пусть пользователь решает, ему же ексел вопрос в случае существования задает.

PM MAIL   Вверх
Albinos_x
Дата 7.9.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата(klyaksa @  7.9.2010,  15:05 Найти цитируемый пост)
Зачем?   Это пусть пользователь решает, ему же ексел вопрос в случае существования задает.

как правило, если я даю решать что то пользователю, то я стараюсь разрывать коннект с сервером приложений иначе можно столкнуться со всякими непредвиденными обстоятельствами и ошибками.... но в этом случае предварительно ничего не сохраняю, а предлагаю пользователю это делать самостоятельно.

по существу вопроса... у тебя после или ещё где-нибудь есть обращение к  серверу приложений? как и где разрываешь связь, и как и где освобождаешь память?

пошаговая отладка также показывает ошибку после этой команды?

Цитата(klyaksa @  6.9.2010,  17:15 Найти цитируемый пост)
Но это все из под дельфи, так то все гладко. 

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


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
klyaksa
Дата 21.9.2010, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albinos_x @  7.9.2010,  16:08 Найти цитируемый пост)
т.е. ошибка появляется тилько в режиме отладки? или все же при обычном запуске тоже пояавляется сообщение?

да...


А как правильно закончить работу с excel и оставить его пользователю?
PM MAIL   Вверх
Albinos_x
Дата 21.9.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



используй метод disconnect


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
klyaksa
Дата 22.9.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albinos_x @  21.9.2010,  22:35 Найти цитируемый пост)
используй метод disconnect

ExcelApplication1.disconnect закрывает эксел... Или я что-то не так пишу?
PM MAIL   Вверх
Albinos_x
Дата 24.9.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



нет. эта команда разрывает связь. Скорее всего у тебя параметр Autoconnect стоит в True, поэтому он и закрывает его. Выставь его в false и будет тебе счастье)))


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
wood
Дата 20.3.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите, как в ворде добавить (или вставить) в существующую таблицу строки (документ был создан ранее - форма отчета).
К ворду подключаюсь через CreateOleObject( 'Word.Application' ), к таблице Table:= MSWord.ActiveDocument.Tables.Item(4);  
PM MAIL   Вверх
wood
Дата 21.3.2011, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нашел!
http://www.delphi.int.ru/articles/11/ - было бы здорово добавить к данной теме
PM MAIL   Вверх
stanlys
Дата 28.3.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возник вопрос, даже после чтения ветки форума.
Проблема такая есть шаблон в ворде (на каждом листе: шапка, рамка, условные обозначения, исполнитель), всего 5 листов и есть 5 картинок(одна в формате bmp, остальные emf). Нужно получить лист и в центре картинка. Первая удачно вставляю, а вот дальше не получается, может быть не работает переход, так и не разобрался в чем проблема. Помогите, пожалуста.

Код


  WordApplication1.Connect;
   fnameword:=knpath+'\графика.doc';
   WordDocument1.ConnectTo(WordApplication1.Documents.Open(FNameword, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam));
   WordApplication1.Visible:=true;
   WordFindAndReplaceinWord(WordDocument1,'<KN>',kn);
   WordFindAndReplaceinWord(WordDocument1,'<AUTHOR>',author);
   ttt:=100;
   WordDocument1.Range.Find.Execute(fnameword,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam
   ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);          picturename:=WordApplication1.ActiveDocument.Shapes.AddPicture(шаблоны+'raster.bmp',EmptyParam,EmptyParam,ttt,ttt,EmptyParam,EmptyParam,EmptyParam).Name;
   WordApplication1.ActiveDocument.Shapes.Item(picturename).Top:=75;
   WordApplication1.ActiveDocument.Shapes.Item(picturename).left:=180;
   WordApplication1.ActiveDocument.Shapes.Item(picturename).Height:=550;
WordApplication1.Browser.Next;
   ttt:=100;
 picturename:=WordApplication1.ActiveDocument.Shapes.AddPicture(шаблоны+'plots.emf',EmptyParam,EmptyParam,ttt,ttt,EmptyParam,EmptyParam,EmptyParam).Name;
   WordApplication1.ActiveDocument.Shapes.Item(picturename).Top:=75;
   WordApplication1.ActiveDocument.Shapes.Item(picturename).left:=180;
   WordApplication1.ActiveDocument.Shapes.Item(picturename).Height:=550;

Вообщем в результате получается, что у меня все картинки на первой странице. Как решить эту проблему???
PM MAIL   Вверх
Ptica_Oz
Дата 17.11.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, уважаемые.
Строю я диаграмму в Excel: открываю шаблон с лежащей на нём пустой диаграммой, заполняю ячейки значениями, подсовываю получившуюся таблицу диаграмме. Всё работает, всё замечательно. Только вот надо мне после построения пройтись по "столбикам" (Point) и задать им конкретные цвета, те, что на генерировал Excel не устраивают smile Записала для этого дела макрос:
Код

    ActiveSheet.ChartObjects("DropUot").Activate
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).Points(6).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Solid
    End With
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With


А вот перевести на свой язык не получается.
Вообще-то я пишу на C#, но подобная проблема возникает и на Delphi на сколько я могу судить по этому
Помогите, пожалуйста, примером на Delphi или C# 
PM MAIL   Вверх
Ptica_Oz
Дата 18.11.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Разобралась!  smile 
Простите, код на C#
Код

 foreach (var point in chartPage.SeriesCollection(1).Points)
{
    point.Format.Fill.ForeColor.RGB = (int)XlRgbColor.rgbRed;
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

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

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


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

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

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


 




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


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

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