crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> MainWIndow+TableWidget+Excel, как быть?
Borodeys
  опции профиля:
сообщение 23.6.2011, 17:42
Сообщение #1


Студент
*

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

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




Репутация:   0  


Задача: реализовать сохранения с TableWidget в Excel.

Раскрывающийся текст
//Получаем указатель на Excel
    QAxObject * mExcel = new QAxObject("Excel.Application",this);
    // Делаем Excel видимым
    mExcel->setProperty("Visible", true);
    // Получаем указатель на работу с коллекцией Workbooks
    QAxObject * workbooks = mExcel->querySubObject("Workbooks");
    // Открываем шаблон (двойной слеш в пути обязателен)
    QAxObject *workbook = workbooks->querySubObject("Open(QVariant)", "c:\\TechJ\\TechJ\\printme.xls");
    //Получаем указатель на листы
    QAxObject * mSheet = workbook->querySubObject("Sheets");
    //Выбираем необходимый лист (Лист1)
    QAxObject * StatSheet = mSheet->querySubObject("Item(const QVariant)", QVariant("Лист1"));


   // data = ui->label_3->setText(ui->tableWidget->item(0,3)->text());

    // получение указателя на ячейку [row][col] ((!)нумерация с единицы)
    QAxObject * cell = StatSheet->querySubObject("Cells(QVariant,QVariant)", 6, 4);
    QVariant result = cell->property("Value");


Но при попытке что-нить сделать с ячейкой (занести в нее данные или получить их ) вылетает фатал ерорр "Инструкция по адрессу0х00424cff" обратилась к памяти по адресу "0х0000000с" память не может быть прочитана"
И еще вопрос: как получить данные из конкретной ячейки TableWidget?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 24.6.2011, 7:17
Сообщение #2


Активный участник
***

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

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




Репутация:   6  


Цитата
// Открываем шаблон (двойной слеш в пути обязателен)
QAxObject *workbook = workbooks->querySubObject("Open(QVariant)", "c:\\TechJ\\TechJ\\printme.xls");
QAxObject * cell = StatSheet->querySubObject("Cells(QVariant,QVariant)", 6, 4);


Попробуйте заменить на:
QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "c:\\TechJ\\TechJ\\printme.xls" );
QAxObject *cell = StatSheet->querySubObject("Cells(const QVariant&, const QVariant&)", QVariant(6), QVariant(4));

Конечно же C:\TechJ\TechJ\printme.xls существует?

Цитата
И еще вопрос: как получить данные из конкретной ячейки TableWidget?

QTableWidget::itemAt(row, column).text();


Сообщение отредактировал silver47 - 24.6.2011, 7:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Borodeys
  опции профиля:
сообщение 25.6.2011, 21:15
Сообщение #3


Студент
*

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

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




Репутация:   0  


Нет, ни чего не помогает. Файл printme.xls конечно существует. Максимум что могу - открыть файл. Ни открыть какой-либо лист, ни указать какую-либо ячейку не получается. И вдобавок еще и компилятор ругается

QAxBase: Error calling IDispatch member Item: Exception thrown by server
Code : 11
Source :
Description:
Help :
Connect to the exception(int,QString,QString,QString) signal to catch this exception
C:\TechJ\TechJ-build-desktop\debug\TechJ.exe завершился с кодом -1073741819

Выручайте, послезавтра защита диплома, очень хочется реализовать эту функцию и продемонстрироать преподам. :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 28.11.2024, 22:07