Для доступу до всіх властивостей і вмісту ячійок у 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.
Коментарі
Дописати коментар