Cómo usar Qt para operar Excel
Utilice Qt para operar Excel, sin importar si el sufijo es xls o xlsx.
1. A continuación se muestra el manual de referencia de Excel VBA descargado. ¡El contenido no está completo!
2. Lectura de Excel
Para facilitar la prueba, se supone que ya existe un archivo de Excel y la operación se ha marcado en rojo.
Como se muestra a continuación:
Contenido de lectura principal:
Título
Número de hojas de trabajo
Nombre de la hoja de trabajo
Fila inicial
Columna inicial
Número de filas
Número de columnas
Contenido de la celda
Código como sigue :
QAxObject excel("Excel.Application");?
excel.setProperty("Visible", true);?
QAxObject *work_books = excel .querySubObject("WorkBooks");?
work_books->dynamicCall("Open (const QString&)", ?QString("E:/test.xlsx"));
QVariant title_value = excel.property(" Caption"); // Obtener el título
qDebug()< QAxObject *work_book = excel.querySubObject("ActiveWorkBook"); QAxObject *work_sheets = work_book->querySubObject("Hojas");//Las hojas también se pueden reemplazar por Hojas de trabajo intsheet_count = work_sheets->property("Count").toInt() ?//Obtener el número de hojas de trabajo qDebug()< for(int i=1; i<=sheet_count; i++) { QAxObject *work_sheet = work_book->querySubObject(" Sheets (int)", i); ?//Sheets(int) también se puede reemplazar por Worksheets(int) QString work_sheet_name = work_sheet->property("Name").toString(); ? // Obtener el nombre de la hoja de trabajo QString message = QString("sheet ")+QString::number(i, 10)+ QString(" ?name"); )< } if(sheet_count > 0) { QAxObject *hoja_trabajo; = libro_de_trabajo ->querySubObject("Hojas(int)", ? 1); QAxObject *used_range = work_sheet->querySubObject("UsedRange"); = rango_usado ->querySubObject("Filas"); /p> QAxObject *columnas = used_range->querySubObject("Columnas"); int row_start = used_range->property("Row").toInt(); fila inicial int column_start = used_range->property("Column").toInt() ?//obtener la columna inicial int row_count = rows->property("Count ").toInt(); ?//obtener el número de filas int column_count = columnas->property("Count").toInt(); ?//obtener el número de columnas for(int i=row_start; i { ? for(int j=column_start; j { ? QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j QVariant cell_value = cell->property("Valor"); Contenido de la celda Mensaje QString = QString("fila-")+QString::número(i, ?10)+QString("-columna-")+QString::número(j, 10) + QString(":"); qDebug()< } } ?? /p> } 3. El efecto es el siguiente: 4. Agregar, eliminar y modificar Excel Operaciones principales: Establecer título Insertar hoja de trabajo (en la última fila) Establecer nombre de hoja de trabajo Eliminar hoja de trabajo Establecer nombre de tabla de trabajo Eliminar hoja de cálculo Eliminar hoja de cálculo Establecer contenido de celda Establecer fuente de celda (tipo, tamaño, negrita, cursiva, subrayado, color, etc Establecer alineación de celda Establecer alto y ancho de celda Establecer color de fondo y color de borde de celda Fusionar/dividir Dividir celdas p> Borrar celdas El código es el siguiente: QAxObject excel("Excel.Application"); setProperty(" Visible", verdadero); ? QAxObject *work_books = excel.querySubObject("WorkBooks"); ? work_books->dynamicCall("Open(const QString&)" , ? " E:\\test.xlsx"); excel.setProperty("Caption", "Qt Excel"); QAxObject *work_book = excel.querySubObject(" ActiveWorkBook") ? QAxObject *work_sheets = work_book->querySubObject("Sheets"); ?//Las hojas también se pueden reemplazar por WorkSheets // Eliminar la hoja de trabajo (eliminar la primera a); ) QAxObject *first_sheet = work_sheets->querySubObject("Item(int)", ?1 first_sheet->dynamicCall("delete"); p>/Insertar hoja de trabajo (insertar en la última fila) intsheet_count = work_sheets->property("Count" toInt() ?// Obtener el número de hojas QAxObject *última_hoja = hojas_de_trabajo->querySubObject("Item(int)", ?sheet_count); QAxObject *hoja_de_trabajo = hoja_de_trabajo->querySubObject("Agregar(QVariant)", ?última_hoja->asVariant( )); last_sheet->dynamicCall("Move(QVariant)", ?,?work_sheet->asVariant()); work_sheet->setProperty("Nombre", " Qt Sheet"); ?//Establecer el nombre de la hoja de trabajo //Celda de operación (fila 2, columna 2) QAxObject *cell = work_sheet->querySubObject(" Cells(int ,int)", 2, ?2); cell->setProperty("Value", "Java C++ C# PHP Perl Python Delphi Ruby"); ?//Establecer valor de celda celda- >setProperty("RowHeight",50);? //Establecer el alto de la fila de la celda cell- >setProperty("ColumnWidth",30);? //Establece el ancho de la columna de la celda cell->setProp erty("HorizontalAlignment", -4108); //alineación izquierda (xlLeft): -4131 ? Centro (xlCenter): -4108 ? VerticalAlignment", -4108); ?// Alineación superior (xlTop) -4160 ? Alineación central: -4108 ? Alineación inferior (xlBottom): -4107 cell->setProperty("WrapText", true) ?// Demasiado contenido, ajuste automático de líneas //cell->dynamicCall("ClearContents()");// Borrar contenido de celda QAxObject* interior = cell ->querySubObject("Interior"); interior->setProperty("Color", QColor(0, 255, 0)); // Establece el color de fondo de la celda (verde) QAxObject* border = cell->querySubObject("Borders");? border->setProperty("Color", QColor(0, 0, 255)); //Establece el color del borde de la celda (Azul) QAxObject *font = cell->querySubObject("Font");//Obtener la fuente de la celda font->setProperty("Name", QStringLiteral( " Huawen Caiyun")); ?//Establecer la fuente de la celda font->setProperty("Bold", true); ?//Establecer la fuente de la celda en negrita font- > setProperty("Size", 20);//Establecer el tamaño de fuente de la celda font->setProperty("Italic", true ?//Establecer el tamaño de fuente de la celda en cursiva font->setProperty("Color", QColor(255, 0, 0)); color de fuente de celda (rojo) //Establecer el contenido de la celda y fusionar celdas (fila 5, columna 3 - fila 8, columna 5) QAxObject * cell_5_6 = hoja_de_trabajo->querySubObject( "Cells(int. int)", 5, ?3); cell_5_6->setProperty("Valor", "Java");/Establecer valor de celda QAxObject * cell_8_5 = hoja_de_trabajo->querySubObject("Celdas(int,int)", 8, ?5); cell_8_5->setProperty(" Valor", "C++") QString merge_cell; merge_cell.append(QChar(3 - 1 + 'A' )); ?//columna inicial merge_cell.append(QString::number(5)); ?//fila inicial merge_cell.append(:"); /p> merge_cell.append(QChar(5 - 1 + 'A'));//terminar columna merge_cell.append(QString::number(8)); terminar fila QAxObject *merge_range = work_sheet->querySubObject("Range(const ?QString&)", merge_cell); merge_range range->setProperty("HorizontalAlignment", -4108) merge_range-> setProperty("VerticalAlignment", -4108); merge_range->setProperty("WrapText", verdadero); ->setProperty("MergeCells", true); ?/Fusionar celdas //merge_range->setProperty("MergeCells", false ?//Dividir las celdas / /work_book->dynamicCall("Save()"); ?//Guarde el archivo (para comparar la prueba con el archivo test2 a continuación, no se realiza ninguna operación de guardado aquí) ?work_book->dynamicCall("SaveAs(const QString&) ", "E:\\test2.xlsx"); ?// ¿Guardar como otro archivo? work_book->dynamicCall("Close(Boolean)", false ?//Cerrar el archivo excel.dynamicCall("Quit(void)"); Salir 5. El efecto es el siguiente: Antes de la operación: Después de la operación: