前段时间通过Qt设置Excel的内容,每次设置 1-3 这种内容的时候,会被Excel自动转为日期格式。
后来查了一下,可以设置单元格为文本属性,显示内容与输入内容保持一致。
需要先设置单元格的格式再设置单元格中的内容,否则1-3还是会被转为日期格式。
QAxObject *t_excel = new QAxObject; //连接Excel控件
QAxObject *t_workBooks; //获取工作簿集合
QAxObject *t_workBook; //获取当前工作簿
QAxObject *t_workSheets; //获取工作表集合
QAxObject *t_workSheet1; //获取工作表集合的工作表Sheets1
QAxObject *t_cell; //获取cell的值
//连接Excel控件,如果没有office,就用WPS
if (t_excel->setControl("Excel.Application"))
{
}
else
{
t_excel->setControl("ket.Application");
}
t_excel->dynamicCall("SetUserControl(bool UserControl)", true); //用户启动程序
t_excel->dynamicCall("SetVisible (bool Visible)", "false"); //不显示窗体
t_excel->setProperty("DisplayAlerts", false); //关闭提示和警告消息
t_workBooks = t_excel->querySubObject("WorkBooks");
t_workBooks->dynamicCall("Add");//工作薄集合中添加工作薄
t_workBook = t_excel->querySubObject("ActiveWorkBook");
t_workSheets = t_workBook->querySubObject("Sheets");
t_workSheet1 = t_workSheets->querySubObject("Item(int)", 1); //工作表1
t_workSheet1->setProperty("Name", "Sheets1"); //设置工作表1名称为Sheets1
int t_colCount = 5; //5列
int t_rowCount = 5; //5行
//设置单元格属性
QString merge_cell;
merge_cell.append(QChar('A')); //初始列
merge_cell.append(QString::number(1)); //初始行
merge_cell.append(":");
merge_cell.append(QChar(t_colCount - 1 + 'A')); //终止列
merge_cell.append(QString::number(t_rowCount + 1)); //终止行
QAxObject *merge_range = t_workSheet1->querySubObject("Range(const QString&)", merge_cell);
merge_range->setProperty("NumberFormat", "@"); //设置所有单元格为文本属性
//写入数据到excel表格
for (int i = 0; i < t_colCount; i++)
{
for (int j = 0; j < t_rowCount; j++)
{
QString t_strData = "NULL";
// 获取excel表格中的单元格索引,以(1, 1)为起点
t_cell = t_workSheet1->querySubObject("Cells(int, int)", j + 1, i + 1);
// 写入数据到excel中的单元格
t_cell->dynamicCall("SetValue(const QString&)", t_strData);
}
}
QFile t_file(t_filePath);
t_workBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(_filePath));
t_workBook->dynamicCall("Close()", false);
t_excel->dynamicCall("Quit()");
//关闭
delete t_excel;
t_excel = NULL;
先设置单元格格式再设置内容!
还有其他几种单元格的数字格式