Я щас тоже это буду делать,
На тебе мой код импорта из excell
QMessageBox msgBox;
// Открываю диалог выбора файла
QString s = QFileDialog::getOpenFileName(this, "Импорт Excel","C:\\","Excel (*.xls *.xlsx)");
if (s == NULL) return; // если вернул ноль то выход
// Создаю Excel
QAxWidget *excel = new QAxWidget("Excel.Application");
if (excel == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Возможно не установлен excel");
msgBox.exec();
return; // если вернул ноль то выход
}
excel->setProperty("Visible", false); // Делаю его невидимым
excel->setProperty("DisplayAlerts", "0"); // Это мне надо, отключает гуеву ругань на различного рода ошибки, чтоб процесс выполнения программы на ошибках и предупреждениях не прерывался
QAxObject *workbooks = excel->querySubObject( "Workbooks" ); //получаем ссылу на коллекцию книг
// Не получили коллекцию книг
if (workbooks == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Не могу получить коллекцию книг Excel");
msgBox.exec();
return; // если вернул ноль то выход
}
QAxObject *shab = workbooks->querySubObject("Open(const QString&)", s); // открываем книгу, хранящуюся на диске, и получаем на нее ссылу
// Ошибка открытия файла
if (shab == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Файл по какойто причине не открылся: " + s);
msgBox.exec();
return; // если вернул ноль то выход
}
// Получаю ссылку на Sheets
QAxObject * Sheets =shab->querySubObject("Sheets");
// Ошибка открытия файла
if (Sheets == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Ошибка Sheets");
msgBox.exec();
return; // если вернул ноль то выход
}
//Загружаю первую страницу "Теле радио каналы"
QAxObject * worksheet =Sheets->querySubObject("Item(const QVariant&)", QVariant("Теле радио каналы"));
// Ошибка при загрузки первой страницы
if (worksheet == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Ошибка при загрузки первой страницы \"Теле радио каналы\" ");
msgBox.exec();
return; // если вернул ноль то выход
}
worksheet->dynamicCall("Select()");
QAxObject * usedrange =worksheet->querySubObject("UsedRange");
// Ошибка UsedRange
if (usedrange == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Ошибка usedrange");
msgBox.exec();
return; // если вернул ноль то выход
}
QAxObject * rows = usedrange->querySubObject("Rows");
// Ошибка Rows
if (rows == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Ошибка rows");
msgBox.exec();
return; // если вернул ноль то выход
}
QAxObject * columns = usedrange->querySubObject("Columns");
// Ошибка Columns
if (columns == NULL) {
msgBox.setWindowTitle("Ошибка Excel");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Ошибка columns");
msgBox.exec();
return; // если вернул ноль то выход
}
int intRowStart = usedrange->property("Row").toInt(); //Получаю начало строчки
int intColStart = usedrange->property("Column").toInt(); //Получаю начало столбца
int intCols = columns->property("Count").toInt(); //Получаю columns
int intRows = rows->property("Count").toInt(); //Получаю rows
ui->tableWidget->clear(); //Отчищаю таблицу на всякий случай
ui->tableWidget->setRowCount(intRows); // Устанавливаю количество строк
ui->tableWidget->setColumnCount(intCols); // Устанавливаю количество столбцов
//Выделяем память под каждую ячейку
for(int i = 0; i <= intRowStart + intRows; i++){
for(int j = 0; j <= intColStart + intCols; j++){
QTableWidgetItem *newItem = new QTableWidgetItem("");
ui->tableWidget->setItem( i, j, newItem);
}
}
// Читаю из Exsel и записываю в Таблицу tableWidget
for (int i = intRowStart; i < intRowStart + intRows; i++)
{
for (int j = intColStart; j < intColStart + intCols; j++)
{
// Получаю ячейку с индексом i,j
QAxObject * range = worksheet->querySubObject("Cells(int,int)", i, j );
// Беру из ячейки значения
QString kz = range->property("Value").toString();
// Выделяю память под индекс и записываю туда значения
QTableWidgetItem *newItem = new QTableWidgetItem(kz);
// Получаю объект Font из Exsel
QAxObject *font= range->querySubObject("Font");
// Если шрифт ячейки жирный то делаю это ячейку не редактируемой
if (font->property("Bold").toBool()) {
newItem->setFlags(Qt::ItemIsEnabled);
QFont f;
f.setBold(true);
newItem->setFont(f);
}
// Занашу значения в ячейку
ui->tableWidget->setItem( i-1, j-1, newItem);
}
}
по нему сделай, сохранения в excel
И напиши мне сюда, а то я потом тоже пыхаться буду.
Смотри, вот пример range->property("Value").toString();
Видишь, Value это команда в excel такая, чтобы получить значения, тебе нужно найти все эти команды, и мне тож дашь ссылку на эти команды, а то я еле нашел эти...