;前言
QAxObject最大的缺点是电脑必须安装wps或者office才可以使用奥而且速度非常慢,
QtXlsx不需要计算机安装office就能对.xlsx文件进行操作,支持跨平台,光速读取数据
xls最大只有65536行、256列
xlsx可以有1048576行、16384列
xlsx另存为xls 会丢失256列之后的数据
#include "myxlsx.h"
MyXlsx::MyXlsx( QString fileName)
{
mXlsx = new QXlsx::Document(fileName);
mFileName = fileName;
//标题单元格样式
mFormat.setFontSize(20);/*设置字体大小*/
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,如果已经存在则覆盖
bool ret = mXlsx->saveAs(fileName);
if(ret){
qInfo() << "创建excel成功!";
}
else{
qWarning() << "创建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);
}
//获取当前工作簿行数
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();
}
//获取当前工作簿列数
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));
}
//打印当前工作簿内容
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();
}
}
}
}
//测试数据
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));
}
}
}