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

Поиск:

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


Бывалый
*


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

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



Цитата(Данкинг @  25.8.2010,  15:08 Найти цитируемый пост)
Возможно, через буфер обмена. Только создай новую тему для этого вопроса.

Пробывал, копируя тут вручную... Из JvRichEdit вставляет голый текст. Если же вставить в ворд и уже оттуда скопировать тогда вставляет...



Как переписать с помощью ExcelApplication, ExcelWorkbook, ExcelWorksheet?
Что постоянно ошибки выскакивают...
Код

// Создание Excel
ExcelApp := CreateOleObject('Excel.Application');
// Отключаем реакцию Excel на события, чтобы ускорить вывод информации
ExcelApp.Application.EnableEvents := false;
//  Создаем Книгу (Workbook)
ExcelApp.SheetsInNewWorkbook := 10;
Workbook := ExcelApp.WorkBooks.Add;
for IWS := 1 to 10 do begin
... WorkBook.WorkSheets[IWS]...
end;







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


Evil Skynet
****


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

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



Цитата(klyaksa @  25.8.2010,  14:48 Найти цитируемый пост)
Подскажите возможно ли экспортировать в excel не плоский текст, а форматированный rtf? Если да, то как?Т.е. у меня в строковой переменной s есть rtf-текст, при присваивании Excel.ActiveWorkBook.WorkSheets[1].Range['A1'].Value:=s в ячейке плоских текст и видны все теги rtf, а не форматированный текст :(

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

Добавлено через 31 секунду
иначе будет вставлять только полный текст

Добавлено через 2 минуты и 48 секунд
Цитата(klyaksa @  25.8.2010,  20:05 Найти цитируемый пост)
Как переписать с помощью ExcelApplication, ExcelWorkbook, ExcelWorksheet?

что именно переписать?
если создание и подключение к серверу с созданием определенного количества страниц, то смотри первые 2 страницы... там про это написано... с примерами...


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


Бывалый
*


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

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



Как переписать разобрался... Я просто 1 у имен обычно убираю, а после as ...
ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkbook.Sheets[NSheet] as ExcelWorkSheet);

А вот с сохранением документа (созданного с нуля) проблема, на всех примерах ругается... Например, не может там что-то в булеан преобразовать... (ExcelXP)
        
PM MAIL   Вверх
Данкинг
Дата 28.8.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(klyaksa @  25.8.2010,  21:05 Найти цитируемый пост)
Как переписать с помощью ExcelApplication, ExcelWorkbook, ExcelWorksheet?

Зачем? Чем ole не нравится? Там сохранение (.SaveAs) отлично работает. smile 


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


Evil Skynet
****


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

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



Цитата(klyaksa @  28.8.2010,  10:26 Найти цитируемый пост)
А вот с сохранением документа (созданного с нуля) проблема, на всех примерах ругается... Например, не может там что-то в булеан преобразовать... (ExcelXP)

Код

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

вообще, конечно, достаточно указать параметр xlExclusive и он не должен ругаться, но для перестраховки можно и так

Добавлено через 31 секунду
xlExclusive - это значит он откроет монопольно...

Добавлено через 7 минут и 42 секунды
Цитата(Albinos_x @  29.8.2010,  20:28 Найти цитируемый пост)
Fileformat:=xlNormal;   // для Office 2003

для office XP этот параметр тоже подойдет... 


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


Бывалый
*


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

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



Albinos_x, все ОК. Спасибо.

Цитата(Данкинг @  28.8.2010,  14:32 Найти цитируемый пост)
Зачем? Чем ole не нравится?

Предупреждения которые мешают заметит нужную ошибку.
PM MAIL   Вверх
klyaksa
Дата 30.8.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Albinos_x, при сохранении с именем уже сущ. файла в excel вылазит окно заменить? (да, нет, отмена). Если нет то делфи выдает ошибку "OLE ERROR 800A03EC"...
PM MAIL   Вверх
fishick
Дата 31.8.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Albinos_x @ 16.7.2008,  17:29)
попробуйте так:

Код

// выделение другой ячейки
 Tbl.Cell(2,3).Range.Select;
WordDocument1.Range.Collapse(fil);
// вставляем текст после выделения, по текущей позиции курсора
 WordApplication1.Selection.InsertAfter(#13+'hello insert');


Добавлено @ 17:30
это по поводу выделения ячейки

Добавлено @ 17:32
если знаете расположение слова с такой точностью, то устанавливайте Range и потом запускайте процедуру Select

Здравствуйте. У меня такая же проблема (отформатировать одно из слов в ячейке таблицы).
Подскажите что я делаю не так: 

tbl.cell(3,3).range.setrange(3,6);
tbl.cell(3,3).range.select;

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


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


Evil Skynet
****


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

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



Цитата(fishick @  31.8.2010,  23:52 Найти цитируемый пост)
tbl.cell(3,3).range.setrange(3,6);
tbl.cell(3,3).range.select;

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


процетируемой командой Вы выделяете всю ячейку, поэтому и подчеркиваются все слова. вам необходимо выделить именно форматируемое слово

Добавлено через 1 минуту и 5 секунд
klyaksa, а какие команды ты выполняешь после? приведи кусок кода в котором ты делаешь сохранение.


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


Бывалый
*


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

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



Цитата(Albinos_x @  1.9.2010,  15:54 Найти цитируемый пост)
klyaksa, а какие команды ты выполняешь после? приведи кусок кода в котором ты делаешь сохранение.


Создание нужного документа в excel  (получается все как надо) и сохранение как в Дата 29.8.2010, 20:28 и все.
PM MAIL   Вверх
fishick
Дата 1.9.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Albinos_x @ 1.9.2010,  15:54)
Цитата(fishick @  31.8.2010,  23:52 Найти цитируемый пост)
tbl.cell(3,3).range.setrange(3,6);
tbl.cell(3,3).range.select;

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


процетируемой командой Вы выделяете всю ячейку, поэтому и подчеркиваются все слова. вам необходимо выделить именно форматируемое слово

Добавлено @ 15:55
klyaksa, а какие команды ты выполняешь после? приведи кусок кода в котором ты делаешь сохранение.

А какой командой можно это сделать? Подскажите, пожалуйста.
PM MAIL   Вверх
Albinos_x
Дата 3.9.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



klyaksa, на какой строчке вылетает ошибка? приведи кусок кода.

Добавлено через 32 секунды
fishick, чуть позже посмотрю, отпишусь


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


Новичок



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

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



У меня появилось кое-какое решение, но не очень элегантное в виду большого количества обращений к серверу. Решил проблему через Characters.
Код

tbl.cell(3,3).Range.Characters.Item(2).select;
w.selection.Range.font.underline:=true;
tbl.cell(3,3).Range.Characters.Item(3).select;
w.selection.Range.font.underline:=true;



выделять приходится по одному символу.
Как выделить сразу несколько символов пока не разобрался, т.к. конструкция 
Код


w.selection.start:=tbl.cell(3,3).Range.Characters.Item(2)
w.selection.end:=tbl.cell(3,3).Range.Characters.Item(3)

выдает ошибку.






Это сообщение отредактировал(а) fishick - 3.9.2010, 13:52
PM MAIL   Вверх
Albinos_x
Дата 3.9.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



вот так можно решить:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
   Tbl: Table;
   fil:OleVariant;
   Rang:Range;
   text:String;
   x,y:Integer;
begin
....
// документ запущен соединение установлено
...
// получаем таблицу
Tbl:=WordApplication1.ActiveDocument.Tables.Item(1);
// получаем текст
text:=Tbl.Cell(8,5).Range.Text;
// получаем позиции начала и конца ранжа
x:=Tbl.Cell(8,5).Range.Start;
y:=Tbl.Cell(8,5).Range.End_;
// выделяем в тексте слово hello 
// получаем его позицию в ранже
x:=x+pos('hello',text)-1;
y:=x+5;
// получаем ранж документа
Rang:=WordDocument1.Range;
// устанавливаем  ранж
fil:=x;
Rang.MoveStart(EmptyParam,fil);
fil:=y-WordDocument1.Range.End_;
Rang.MoveEnd(EmptyParam,fil);
// выделяем слово
Rang.Font.Bold:=1;
end;



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


Новичок



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

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



Albinos_x, попробую. Спасибо!
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.1739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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