QT框架下的文本操作(二)

发布时间:2024-08-08 11:01

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,调用 addSeriessetChartType,可以对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();
}

完整的文本操作源码,点击此处下载。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号