Перейти до основного вмісту

Публікації

Показано дописи з 2012

Qt та Excel. Робота з ячейками.

Для доступу до всіх властивостей і вмісту ячійок у Excel використовуються два об'єкти Range і Cells. Між ними є тільки одна відмінність (крім назви) - перший об'єкт забезпечує доступ до області ячійок та його аргументом є строка. QAxObject *myRange; myRange = sheetAct->querySubObject("Range (QVariant)", "A1:D3"); myRange->dynamicCall("Select()"); / / виділяємо діапазон ячійок Cells забезпечує доступ тільки до однієї ячійки і аргументом є номер рядка і стовпця. Таким чином запис виду: QAxObject *myRange; myRange = sheetAct->querySubObject("Range(QVariant)", "A2"); і QAxObject *myCells; myCells = sheetAct->querySubObject("Cells (Int, Int)", 1, 2); є рівнозначною. Щоб визначити реальну адресу ячійки або діапазону ячійок можна скористатися властивістю Address, яке має наступні параметри: RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo. myRange = sheetAct->querySubObject("

Qt та Excel. Робота з книгами та листами 2.

В продовження ось цієї статті ми будемо готувати. xls файл до друку. Процес підготовки документа до друку складається з таких етапів як визначення розміру паперу, полів, настройка колонтитулів і т.д. Задаємо області друку. activeSheet->querySubObject("PageSetup")->dynamicCall("PrintArea", "A1: D3"); // область друк А1: D3 Поля сторінки. Поля сторінки задаються в точках, 1 точка = 1/72 дюйма = 1/28 сантиметра. Для завдання полів використовується чотири властивості: TopMargin, RightMargin, BottomMargin, LeftMargin. activeSheet->querySubObject("PageSetup")->dynamicCall("TopMargin", 28); // верхнє поле дорівнює 1 см. Колонтитули. Величина колонтитулів задається властивостями: HeaderMargin, FooterMargin. activeSheet->querySubObject("PageSetup")->dynamicCall("HeaderMargin", 28); // розмір верхнього колонтитула дорівнює 1см. Тут є невеликий підступ, якщо значення верхнього поля менше вел

Qt та Excel. QTableWidget туди і назад.

У цій статті мова піде про те, як прийняти дані з Excel в QTableWidget і відправити назад в Excel. Візьмемо книгу Excel у якої є 2 листа, на першому розташована невелика таблиця (її ми і буде читати в QTableWidget), а в другій лист порожній, сюди ми віддамо таблицю з QTableWidget.   Ось так, як на малюнку праворуч, виглядає цільова таблиця. На формі розташуємо QTableWidget. Заздалегідь знаючи, якого розміру таблиця, можна відразу виставити кількість стовпців, рядків, прописати назви стовпців, але ми не будемо цього робити. Почнемо з читання таблиці. QAxObject * list;      list = sheets-> querySubObject ("Item (int)", 1); / / оголошуємо лист, на якому таблиця      int colEx = 6; / / оголошуємо кількість стовпців      QStringList headers; / / сюди запишемо заголовки стовпців      for (int a = 1; a <= colEx; a + +) {/ / вичитуємо заголовки          headers << list-> querySubObject ("Cells (int, int)", 2, a) -> dynamicCall ("Value

Qt та Excel. Печать

Так вийшло, що у Excel досить мізерні можливості друку. Він не вміє друкувати парні або непарні сторінки листа, або скажімо парні або непарні листи. Навіть Calc з LibreOffice володіє більшим функціоналом. Але це, як виявилося, поправно . Я не буду тут докладно описувати весь код , за допомогою якого можна друкувати як завгодно. Я лише дам посилання, на програму написану мною для друку файлів .x ls . Це opensource -проект, так що будь-хто може качати , використовувати, переробляти, видаляти його абсолютно вільно, дозволяю . Завантажити програму можна на SourceForge.net   http://sourceforge.net/projects/exprint/files/ Вихідні файли будуть особливо корисні тим , хто читає це не просто так , взяти їх можна там же . Там же лежать і вихідні файли написані мною на Delphi ще раніше, але вони не достатньо тестувалися і ймовірно містять помилки :) Якщо у кого виникнуть труднощі з використанням

Qt та Excel. Робота з книгами і листами.

Тема Qt та Excel виявилася досить актуальною, тому спробую розвинути питання про доступ до даних .xls файлу використовуючи ActiveQt. Оголошення змінних: QAxObject *excel; //Excel QAxObject *wbook; //Workbooks QAxObject *book; // Активная книга QAxObject *sheets; //Листы QAxObject *activeSheet;//Активный лист Запуск Excel: excel = new QAxObject("Excel.Application",this); excel->setProperty("Visible", 0); excel->setProperty("DisplayAterts",0); wbook = excel->querySubObject("Workbooks"); sheets = book->querySubObject("Sheets"); activeSheet = book->querySubObject("ActiveSheet"); Закриття Excel: wbook->dynamicCall(“Close()”); excel->dynamicCall(“Quit()”); delete excel; // так напевно Excel не буде висіти в процесах. Створення нової книги: wbook->dynamicCall(Add()); Відкриття існуючої книги: book = wbook->dynamicCall(“Open(const QString&)”, filename); Збереження: wbook-&g

CSV в QTableWidget

Питання виникло в зв'язку з виниклою необхідністю прочитати .xls файл в Linux'і. Я так думаю у більшості користувачів Linux, є якийсь небудь офісний пакет, такий як OpenOffice або LibreOffice або щось там ще, за допомогою якого можна легко конвертувати .xls в .сsv. А .сsv - це текст, який можна читати в будь-якій системі. Пропоную читати файл у QTableWidget. Зберемо простеньку програму. Файл file_csv.csv виглядає так:   На форму покладемо QTableWidget, QListWidget, QPushButton. void MainWindow::readFile(){     QFile file("file_csv.csv"); //файл (треба буде зробити діалог)     QStringList listA; //лист в який запишемо данні     int row = 0; //кількість рядків у майбутній таблиці (ми ж не знаємо скільки їх там ;)     if (file.open(QIODevice::ReadOnly)){         while (!file.atEnd()){             QString line = file.readLine(); // читаємо по рядках,  якщо читати до кінця результат буде некоректний, але буде :)             listA = line.split(",&