excel文件
excel文件是工作中常用的文本格式,这里我们使用 XlsxWriter 第三方库去实现excel文件操作。
XlsxWriter 的github项目地址:点击这里
文件打开
头文件中
QTXLSX_USE_NAMESPACE
Document* m_xlsx;
cpp中
m_xlsx = new Document(fileName);
文件读取
因为excel有工作表的概念,所以在文件操作之前先要选定当前的工作表。
选定当前工作表
bool ExcelUtil::selectSheet(const QString &sheetName)
{
if (!m_xlsx)
return false;
return m_xlsx->selectSheet(sheetName);
}
读取当前工作表中所有的数据
// @return 链表中每一个元素为行数据
QList<QVariantList> ExcelUtil::readAllCellsData()
{
QList<QVariantList> allDatas;
if (!m_xlsx)
return allDatas;
CellRange allCellRange = m_xlsx->dimension();
if (!allCellRange.isValid())
return allDatas;
QVariantList lineData;
for (int curRow = allCellRange.firstRow();curRow <= allCellRange.lastRow();curRow++)
{
lineData.clear();
for (int curCol = allCellRange.firstColumn();curCol <= allCellRange.lastColumn();curCol++)
{
lineData.append(m_xlsx->read(curRow,curCol));
}
allDatas.append(lineData);
}
return allDatas;
}
范围读取
// @param cellRange:要读取的范围
// @return 链表中每一个元素为行数据
QList<QVariantList> ExcelUtil::readRangeCellsData(const CellRange& cellRange)
{
QList<QVariantList> allDatas;
if (!m_xlsx)
return allDatas;
QVariantList lineData;
for (int curRow = cellRange.firstRow();curRow <= cellRange.lastRow();curRow++)
{
lineData.clear();
for (int curCol = cellRange.firstColumn();curCol <= cellRange.lastColumn();curCol++)
{
lineData.append(m_xlsx->read(curRow,curCol));
}
allDatas.append(lineData);
}
return allDatas;
}
单元格读取
// @param row:行序号,col:列序号
QVariant ExcelUtil::readCellData(int row,int col)
{
if (!m_xlsx)
return QVariant();
return m_xlsx->read(row,col);
}
文件写入
范围写入
// @param firstRow:起始行序号,firstCol:起始列序号,datas:要写入的数据,format:单元格格式
bool ExcelUtil::writeRangeCellsData(int firstRow,int firstCol,const QList<QVariantList>& datas,const Format &format)
{
if (!m_xlsx)
return false;
int rowCount = firstRow,colCount = firstCol;
Q_FOREACH (const QVariantList& lineData,datas)
{
colCount = firstCol;
Q_FOREACH(const QVariant& cellData,lineData)
{
if (!m_xlsx->write(rowCount,colCount,cellData,format))
return false;
colCount++;
}
rowCount++;
}
return true;
}
单元格写入
// @param row:行序号,col:列序号,cellData:要写入的数据,format:单元格格式
bool ExcelUtil::writeCellData(int row,int col,const QVariant& cellData,const Format &format)
{
if (!m_xlsx)
return false;
return m_xlsx->write(row,col,cellData,format);
}
格式设置
设置宽度
// @param firstCol(int):起始行序号,lastCol(int):截止行序号,width(int):宽度
m_xlsx->setColumnWidth(firstCol,lastCol,width);
设置高度
// @param firstRow(int):起始列序号,lastRow(int):截止列序号,height(int):高度
m_xlsx->setRowHeight(firstRow,lastRow,height);
设置显隐
// @param firstCol(int):起始行序号,lastCol(int):截止行序号,hidden(bool):是否显示
m_xlsx->setColumnHidden(firstCol,lastCol,hidden);
// @param firstRow(int):起始列序号,lastRow(int):截止列序号,hidden(bool):是否显示
m_xlsx->setRowHidden(firstRow,lastRow,hidden);
设置格式
// @param firstCol(int):起始行序号,lastCol(int):截止行序号,format(QXlsx::Format):格式
m_xlsx->setColumnFormat(firstCol,lastCol,format);
// @param firstRow(int):起始列序号,lastRow(int):截止列序号,format(QXlsx::Format):格式
m_xlsx->setRowFormat(firstRow,lastRow,format);
插入图表
插入图片
bool ExcelUtil::insertImage(int row, int col, const QImage &image)
{
if (!m_xlsx)
return false;
return m_xlsx->insertImage(row,col,image);
}
插入图表
// @return 插入的图表
QXlsx::Chart* ExcelUtil::insertChart(int row, int col, const QSize &size)
{
if (!m_xlsx)
return 0;
return m_xlsx->insertChart(row,col,size);
}
获取返回的Chart,调用 addSeries 和 setChartType,可以对Chart进行绘制。
ini文件
ini文件为常规的配置文件,其格式如下:
[SubStation]
SupplyP="station.p;attach:pri,dir:s,src:clean"
其中,SubStation 为组名,SupplyP 为key名,“station.p;attach:pri,dir:s,src:clean” 为key值。
这里我们使用 QSettings 来实现对ini文件的读写。
文件读取
// @param groupName:组名,key:key名,defaultValue:默认值
QVariant IniUtil::getValue(const QString &groupName, const QString &key, const QVariant &defaultValue)
{
QVariant valueVariant = QVariant();
// m_fileName:文件名,m_codeName:文件编码,如:"UTF-8"
QSettings settings(m_fileName, QSettings::IniFormat);
settings.setIniCodec(m_codeName.toStdString().c_str());
settings.beginGroup(groupName);
valueVariant = settings.value(key, defaultValue);
settings.endGroup();
return valueVariant;
}
文件写入
// @param groupName:组名,key:key名,value:key值
void IniUtil::setValue(const QString &groupName, const QString &key, const QVariant &value)
{
// m_fileName:文件名,m_codeName:文件编码,如:"UTF-8"
QSettings settings(m_fileName, QSettings::IniFormat);
settings.setIniCodec(m_codeName.toStdString().c_str());
settings.beginGroup(groupName);
settings.setValue(key, value);
settings.endGroup();
}