crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

8 страниц V  « < 2 3 4 5 6 > »   
Ответить в данную темуНачать новую тему
> Cells в QT при работе с MS Office
Professor
  опции профиля:
сообщение 28.10.2009, 13:35
Сообщение #31


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.4.2008
Пользователь №: 151

Спасибо сказали: 0 раз(а)




Репутация:   0  


Получение количества таблиц(sheet):
int sheet_count = [b]sheets_ascii[/b]->property("Count").toInt();


Получение количества использованных строк/столбцов:
QAxObject *usedRange = [b]sheet_ascii[/b]->querySubObject("UsedRange");
QAxObject *usedRows = usedRange->querySubObject("Rows");
QAxObject *usedCols = usedRange->querySubObject("Columns");


int rows = usedRows->property("Count").toInt();
int cols = usedCols->property("Count").toInt();
Причина редактирования: пользуйся форматированием кода (code)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Chesterfilda
  опции профиля:
сообщение 29.10.2009, 10:36
Сообщение #32


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 29.10.2009
Пользователь №: 1187

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго время суток!!!Очень полезная тема...
А не подскажете,как вот такой код на VBA:
Selection.QueryTable.Refresh BackgroundQuery:=False

можно переписать на Qt

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Professor
  опции профиля:
сообщение 29.10.2009, 13:46
Сообщение #33


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.4.2008
Пользователь №: 151

Спасибо сказали: 0 раз(а)




Репутация:   0  


Chesterfilda попробуйте добраться до объекта QueryTable и выполнить generateDocumantation().

Новые находки - доступ к символам внутри ячейки:
cell_ascii = sheet_ascii->querySubObject("cells(int,int)",i,j);
cell_ascii->dynamicCall("Select()");
char_ascii = cell_ascii->querySubObject("Characters(int,int)",s,l);
QChar char = char_ascii->property("Text").toString().at(0);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Chesterfilda
  опции профиля:
сообщение 30.10.2009, 15:36
Сообщение #34


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 29.10.2009
Пользователь №: 1187

Спасибо сказали: 0 раз(а)




Репутация:   0  


Чуть-чуть разобралась...
Только вот небольшая проблемка...
Есть такая функция:
IDispatch* Add (QVariant Connection, IDispatch* Destination, QVariant Sql)

,которая как раз-таки и создает QueryTable...
только не получается задать второй параметр этой функции,который указывает ячейку с которой начинается вставка данных.
В этом случае должна помочь
IDispatch* Range (QVariant Cell1, QVariant Cell2),но как-то не получается с помощью нее определить ячейку

Точнее никак не получается написть это на QT

    QAxObject *excel = new QAxObject( "Excel.Application",this); //получаем указатьтель на excel
    excel->dynamicCall( "SetVisible(bool)", TRUE ); //делаем его видимым
    QAxObject *workbooks = excel->querySubObject("Workbooks");
    QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "E:\\workspace\\test\\debug\\Отчет.xls");
    QAxObject *sheets=workbook->querySubObject("Sheets");
    QAxObject *statSheet=sheets->querySubObject("Item(const QVariant&)",QVariant("Лист1"));
    QAxObject *range=statSheet->querySubObject("Range(QVariant &)",QVariant(QString("A4")));
    //range->dynamicCall("Select()");
    QAxObject *table=statSheet->querySubObject("QueryTables");
    QAxObject *result=table->querySubObject("Add(QVariant &,IDispatch *,QVariant &)",QVariant(QString("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=E:\workspace\LS\release\data\oms_LS.mdb")),range,"select * from [result]"); //только сдесь не range нужно указать,а вот как обратится к ячейке в таком случае??

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Chesterfilda
  опции профиля:
сообщение 3.11.2009, 10:02
Сообщение #35


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 29.10.2009
Пользователь №: 1187

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нашла где-то на сайте:
Цитата
Если методу нужно передать аргумент типа IDispatch * или IUnknown *, то можно сначала инкапсулировать его в объект QAxObject, а затем вызвать метод asVariant(), чтобы преобразовать его в тип QVariant

Но это не помогает :-(...Если пишу:
QAxObject *result=table->querySubObject("Add(QVariant &,IDispatch *,QVariant &)",QVariant(QString("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=E:\workspace\LS\release\data\oms_LS.mdb")),range->asVariant(),QVariant(QString("SELECT * FROM [result]")));

то выдает след ошибку:
QAxBase: Error calling IDispatch member Add: Exception thrown by server
Как же обратится к этой ячейке??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Professor
  опции профиля:
сообщение 4.11.2009, 19:45
Сообщение #36


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.4.2008
Пользователь №: 151

Спасибо сказали: 0 раз(а)




Репутация:   0  


Chesterfilda а может вместо:
QAxObject *range=statSheet->querySubObject("Range(QVariant &)",QVariant(QString("A4")));
попробовать:
QAxObject *range=statSheet->querySubObject("Range(QVariant &)",QVariant(QString("A4:C8")));
Я не проверят но может сработает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dim_san
  опции профиля:
сообщение 13.11.2009, 14:09
Сообщение #37


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 13.11.2009
Пользователь №: 1228

Спасибо сказали: 0 раз(а)




Репутация:   0  


Создаю документ ворда таким образом:

QAxWidget *activeX = new QAxWidget( );
activeX->setControl( "Word.Document" );
ui->verticalLayout->insertWidget(0, activeX );

при этом размещаю его в лайауте. Показывается документ как и надо (встроенный в мой виджет).
Можно ли каким-то образом достать вордовский тулбар и разместить его куда надо мне, например на основной тулбар моего приложения?
Или придется делать собственный?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 20.11.2009, 9:27
Сообщение #38


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Цитата(dim_san @ 13.11.2009, 14:09) *
Можно ли каким-то образом достать вордовский тулбар и разместить его куда надо мне, например на основной тулбар моего приложения?
Или придется делать собственный?

Разобрался с этим вопросом?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dim_san
  опции профиля:
сообщение 23.11.2009, 15:27
Сообщение #39


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 13.11.2009
Пользователь №: 1228

Спасибо сказали: 0 раз(а)




Репутация:   0  


arial, неа.
Такое впечатление, что он пытается сам появиться, панелька пустая появляется и тут же исчезает.
Но теоретически это должно быть можно сделать, т.к. видел работающий пример на mfc вроде...

Кстати, меню вордовское формируется прямо в главном qt-шном окне, но оно не действует...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rosster
  опции профиля:
сообщение 23.11.2009, 20:51
Сообщение #40


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 23.11.2009
Пользователь №: 1254

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет. А откуда вы берете все эти команды?
Open(const QString&)
Item(const QVariant&)
QAxObject *rangep = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(3),QVariant(1));
rangec->dynamicCall("Copy()");
и так далее?
и еще:
получаем указатель на листы:
QAxObject *mSheets = workbook->querySubObject( "Sheets" );
а как узнать какие листы вообще в документе есть? Ибо возможности узнать название листа и вписать в прогу нету возможности (много разных документов имеются)
Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

8 страниц V  « < 2 3 4 5 6 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.11.2024, 4:25