crossplatform.ru

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

abra
  опции профиля:
сообщение 24.3.2009, 19:27
Сообщение #1


Студент
*

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

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




Репутация:   2  


Привет.
Здесь столкнулся с такой заботой.
QAxObject *range = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A1:B6"))); (выделяем диапозон для работы)
QAxObject *range = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A1"))) (выделяем 1 ячейку)
QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&)",QVariant(QString("1"))) ( выделяем 1 ячейку(аналог Cells(1,1))
QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&)",QVariant(QString("2"))) (выделяем вторую ячейку (аналог Cells(1,2))

Но у меня есть таблица БД.В ней поля.СЛедовательно,должна соблюдаться структура при выводе данных в Эксель

1 поле 2 поле 3 поле 4 поле 5 поле

Но!Как мне обратиться скажем к Cells(2,2)...или Cells(3,4)...Причем это обязательно нужно сделать через цифры (Cells(X,Y) (X,Y- целочисленные указатели на ячейки))
Потому что через A1 нельзя вызывать(в таком случае будет слишком мудрено вызываться ячейка B1)


________________________________________________________________________________
____________________________________________

Хм...Ребят,подождите...Сейчас одна идейка возникла...Может написать

QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(QString("2")),QVariant(QString("1")))

попробовать.........

________________________________________________________________________________
______________________________________________
Не помогло........

QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&;const QVariant&)",QVariant(QString("4")),QVariant(QString("8")));

Пишет значение в ячейку D1(принял первый параметр равный 4) :((((
Он почему то принимает только первый параметр,и всё.........

Какие будут предложения?

Сообщение отредактировал abra - 24.3.2009, 19:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
8 страниц V  « < 2 3 4 5 6 > »   
Начать новую тему
Ответов (30 - 39)
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 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 26.5.2025, 0:59