#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTableWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void initView();
void showTableString(const QStringList table);
void on_actionopen_triggered();
private:
Ui::MainWindow *ui;
QTableWidget *m_table;
};
#endif
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
#include <QFileDialog>
#include <QAxObject>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initView();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initView(){
QHBoxLayout *main_layout = new QHBoxLayout;
m_table = new QTableWidget;
main_layout->addWidget(m_table);
setCentralWidget(m_table);
on_actionopen_triggered();
}
void MainWindow::on_actionopen_triggered()
{
QString fileName=QFileDialog::getOpenFileName(this,"读取","*.xlsx");
if(fileName.isEmpty())
return;
fileName=QDir::toNativeSeparators(fileName);
QAxObject*myExcel=new QAxObject("Excel.application",this);
myExcel->setProperty("DisplayAlerts",false);
QAxObject*workBooks=myExcel->querySubObject("WorkBooks");
workBooks->dynamicCall("Open(const QString&)",fileName);
QAxObject*workBook=myExcel->querySubObject("ActiveWorkBook");
QAxObject*mySheets=workBook->querySubObject("Sheets");
QAxObject*sheet=mySheets->querySubObject("Item(int)",1);
QAxObject*range=sheet->querySubObject("UsedRange");
QAxObject*rows=range->querySubObject("Rows");
QAxObject*colums=range->querySubObject("Columns");
int count_row=rows->dynamicCall("Count").toUInt();
int count_col=colums->dynamicCall("Count").toUInt();
QStringList tableString;
QAxObject*cell;
tableString.clear();
for(int i=1;i<=count_row;i++)
{
QString line;
for(int j=1;j<=count_col;j++)
{
cell=range->querySubObject("Cells(int,int)",i,j);
line+=cell->dynamicCall("Value").toString()+"\t";
}
tableString.append(line);
}
workBook->dynamicCall("Close()");
myExcel->dynamicCall("Quit()");
showTableString(tableString);
}
void MainWindow::showTableString(const QStringList table)
{
if(table.isEmpty())
return;
QStringList header=table.at(0).simplified().split(' ',QString::SkipEmptyParts);
m_table->setRowCount(table.count()-1);
m_table->setColumnCount(header.count());
m_table->setHorizontalHeaderLabels(header);
for(int i=1;i<table.count();i++)
{
QStringList line=table.at(i).split('\t',QString::KeepEmptyParts);
for(int j=0;j<header.count();j++)
{
QTableWidgetItem*item=new QTableWidgetItem;
item->setText(line.at(j));
item->setTextAlignment(Qt::AlignCenter);
m_table->setItem(i-1,j,item);
}
QTableWidgetItem*item=m_table->item(i-1,header.count()-1);
qreal aver=item->text().toDouble();
item->setText(QString("%1").arg(aver,4,'f',1));
}
}