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

6 篇文章 0 订阅

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();
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值