;前言
QAxObject最大的缺點是電腦必須安裝wps或者office才可以使用奧而且速度非常慢,
QtXlsx不需要計算機安裝office就能對.xlsx文件進行操作,支持跨平臺,光速讀取數(shù)據(jù)
xls最大只有65536行、256列
xlsx可以有1048576行、16384列
xlsx另存為xls 會丟失256列之后的數(shù)據(jù)
#include "myxlsx.h"
MyXlsx::MyXlsx( QString fileName)
{
mXlsx = new QXlsx::Document(fileName);
mFileName = fileName;
//標題單元格樣式
mFormat.setFontSize(20);/*設(shè)置字體大小*/
mFormat.setFontBold(true);//字體加粗
mFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter);//橫向居中
mFormat.setVerticalAlignment(QXlsx::Format::AlignVCenter);//縱向居中
mFormat.setBorderStyle(QXlsx::Format::BorderDashDotDot);//邊框樣式
}
MyXlsx::~MyXlsx()
{
delete mXlsx;
mXlsx = NULL;
}
QString MyXlsx::read(int row, int col)
{
// mXlsx->read(1,1); 讀取第一行第一列
QVariant v = mXlsx->read(row,col);
return v.toString();
}
/*
//往sheet2 的row 1 列1 寫入123
xlsx->write(1,1, QString::number(123));
//往sheet2 的row 1 列2 寫入123
xlsx->write(2,2, QString::number(123));
xlsx->write(3,3, QString::number(123));
xlsx->selectSheet("第1個sheet");
xlsx->write(1,1, QString::number(123));*/
void MyXlsx::write(int row, int col,QString data)
{
//往sheet 的row 1 列1 寫入123
//xlsx->write(1,1, QString::number(123));
mXlsx->write(row,col, data);
}
void MyXlsx::write(int row, int col, QString data, bool format=false)
{
if (format) {
mXlsx->write(row,col, data,mFormat);
} else {
mXlsx->write(row,col, data);
}
}
void MyXlsx::save()
{
mXlsx->save();
}
void MyXlsx::saveAs(QString fileName)
{
//bool ret = xlsx->saveAs(EXCEL_NAME); // 保存到EXCEL_NAME,如果已經(jīng)存在則覆蓋
bool ret = mXlsx->saveAs(fileName);
if(ret){
qInfo() << "創(chuàng)建excel成功!";
}
else{
qWarning() << "創(chuàng)建excel失敗!";
}
}
/*
// 添加第一個工作簿 sheet
xlsx->addSheet("第1個sheet", AbstractSheet::ST_WorkSheet);
xlsx->addSheet("第2個sheet", AbstractSheet::ST_WorkSheet);
*/
void MyXlsx::addSheet(QString name)
{
//xlsx->addSheet("第1個sheet", AbstractSheet::ST_WorkSheet);
mXlsx->addSheet(name, AbstractSheet::ST_WorkSheet);
}
void MyXlsx::selectSheet(QString name)
{
//xlsx->selectSheet("第1個sheet");
if(!mXlsx->selectSheet(name))
{
//沒有這個工作簿則添加,此后基于這個新工作簿操作
mXlsx->addSheet(name);
}
}
/*
工作簿重命名,注意 excel文件如果被打開,此時程序做的寫入命名等操作是無效的奧
*/
void MyXlsx::renameSheet(QString oldName,QString newName)
{
//xlsx->renameSheet("第1個sheet","first sheet");
mXlsx->renameSheet(oldName,newName);
}
//獲取當前工作簿行數(shù)
int MyXlsx::rowCount()
{
//獲取指定工作簿有效行 列 start
//QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(mXlsx->sheet("first"));
// int row = workSheet->dimension().rowCount();
// int col = workSheet->dimension().columnCount();
//獲取指定工作簿有效行 列 end
QXlsx::Worksheet *worksheet = mXlsx->currentWorksheet();
return worksheet->dimension().rowCount();
}
//獲取當前工作簿列數(shù)
int MyXlsx::colCount()
{
QXlsx::Worksheet *worksheet = mXlsx->currentWorksheet();
return worksheet->dimension().columnCount();
}
//合并單元格
void MyXlsx::span(int row,int col,int row2,int col2)
{
//xlsxDocument.mergeCells(QXlsx::CellRange(3,1,3,3), tableTitleFormat);
//合并第4行,第一列到第三列
//mXlsx->mergeCells(QXlsx::CellRange(4,1,4,3));
mXlsx->mergeCells(QXlsx::CellRange(row,col,row2,col2));
}
//打印當前工作簿內(nèi)容
void MyXlsx::print()
{
for(int row = 0; row < 10; row++)
{
for(int col = 0; col < 10; col++)
{
QVariant data = mXlsx->read(row+1, col+1);
if (!data.isNull()) {
qDebug()<< data.toString();
}
}
}
}
//測試數(shù)據(jù)
void MyXlsx::testInsert()
{
for(int row = 0; row < 10; row++)
{
for(int col = 0; col < 10; col++)
{
mXlsx->write(row+1, col+1,QString::number(row) + "," + QString::number(col));
}
}
}
浙公網(wǎng)安備 33010602011771號