Для доступу до всіх властивостей і вмісту ячійок у 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("Range (QVariant)", "A3:H8");
ui.listEdit->setText(myRange->dynamicCall("Address()"). toString()); // отримаємо $A$3:$H$8
ui.listEdit2->setText(myRange->dynamicCall("Address (QVariant, QVariant, int)", true, true, -4150). toString()); // отримаємо R3C1:R8C8
ui.listEdit3->setText myRange->dynamicCall("Address (QVariant, QVariant, int)", false, false, -4150). toString()); // отримаємо R[2]C:R[7]C[7]
Визначаємо кількість ячійок в діапазоні.
myRange = sheetAct->querySubObject("Range(QVariant)", "A3:H8");
ui.spinBox->setValue(myRange-> dynamicCall("Count()").toInt()); // отримаємо 48
Я не буду зупинятися на доступі до даних, так як це вже було описано в попередніх статтях.
Зупинюся на очищенні та видаленні даних. З очищенням все просто:
myRange = sheetAct->querySubObject("Range(QVariant)","A1:D3");// вибираємо діапазон
myRange->dynamicCall("Clear()"); // очищаємо
На місці вибраного діапазону будуть чисті ячійки. У разі якщо нам потрібно не просто очистити,
а видалити разом з ячійками, то користуємося функцією Delete. У функції Delete є такий параметр Shift
який визначає зсув ячійок після видалення. Shift може приймати такі значення:
xlShiftToLeft = -4159 // Видалення із зсувом вліво;
xlShiftUp = -4162 // Видалення із зсувом вгору.
myRange = sheetAct->querySubObject("Range(QVariant)","A1:D8");// вибираємо діапазон
myRange->dynamicCall("Delete(Int)", -4162); // видаляємо із зсувом вгору
Вставка ячійок.
Такий же як у властивості Delete параметр Shift є у властивості Insert, і він може приймати такі значення:
xlShiftToRight = -4161 // вставка із зсувом вправо;
xlShiftDown = -4121 // вставка із зсувом вниз.
myRange->dynamicCall("Insert(Int)", -4121); // вставляємо із зсувом вниз
Формат відображення даних.
За формат відображення даних відповідає властивість NumberFormat, ми може як читати його значення, так і
привласнювати.
myCells = sheetAct->querySubObject("Cells(Int, Int)", 2, 5) ;// вибираємо ячійку
ui.lineEdit_format->setText(myCells-> dynamicCall("NumberFormat").toString()) ; / читаємо в QLineEdit;
Привласнювати зручно групі ячійок коли потрібно показати дату або число в потрібному форматі:
myRange = sheetAct->querySubObject("Range (QVariant)", "A1:А80") ;// вибираємо діапазон
myRange->dynamicCall("NubmerFormat", "ДД.ММ.РРРР"); // дати в форматі "01.01.2012"
Повний список можливих форматів дат, чисел, рядків подивіться в довідці по VisualBasic встановленого у
Вас Excel.
Коментарі
Дописати коментар