Red de conocimiento informático - Material del sitio web - Cómo usar Qt para operar Excel

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

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

<); p>font->setProperty("Underline", 2); ?//Establecer subrayado de celda

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: