{"title":"C++ 使用 Spire.Xls 将 MYSQL_ROW 数据写入 Excel 文件","description":"本文介绍了如何使用 C++ 和 Spire.Xls 库将从 MySQL 数据库获取的 MYSQL_ROW 数据写入 Excel 文件。文章详细解释了程序终止的原因以及如何解决类型不匹配错误,并提供了解决方案代码。","keywords":"C++, Spire.Xls, MYSQL_ROW, Excel, 数据库, 数据写入, 类型转换, 错误解决","content":"void exltest(MYSQL_ROW data) { printf("exltest\n");

//指定输出文件路径和名称
wstring outputPath = L"C:\\Users\\gxyz\\Desktop\\"; 
wstring outputFile = outputPath + L"test485.xlsx";

//创建一个Workbook对象
Workbook* workbook = new Workbook();

//获取第一个工作表
//Worksheet* sheet = workbook->GetWorksheets()->Get(0);
boost::intrusive_ptr<Spire::Xls::XlsWorksheet> sheet = workbook->GetWorksheets()->Get(0);

//创建一维数组
wstring oneDimensionalArray[12] = { L"编号", L"v0", L"v1", L"v2", L"v3", L"v4", L"v5", L"v6", L"v7", L"v8", L"v9", L"v10" };

//将数组转换为向量
vector<LPCWSTR> vec;
for (size_t i = 0; i < sizeof(oneDimensionalArray) / sizeof(oneDimensionalArray[0]); i++)
{
	vec.push_back(oneDimensionalArray[i].c_str());
}

//将向量插入工作表
sheet->InsertArray(vec, 1, 1, false);
/*
//创建一个二维数组
wstring twoDimensionalArray[12][12];
for (size_t i = 0; i < 12; i++) {
	for (size_t j = 0; j < 12; j++) {
		twoDimensionalArray[i][j] = data[i][j];  //程序在此终端
	}
}
printf("***************\n");
//获取行号和列号
//int rowNum = sizeof(twoDimensionalArray) / sizeof(twoDimensionalArray[0]);
//int columnNum = sizeof(twoDimensionalArray[0]) / sizeof(twoDimensionalArray[0][0]);

//将二维数组拆分为多个一维向量
for (size_t i = 0; i < 12; i++)
{
	vector<LPCWSTR> vec_temp;
	for (size_t j = 0; j < 12; j++)
	{
		vec_temp.push_back(twoDimensionalArray[i][j].c_str());
	}
	//将向量插入工作表
	sheet->InsertArray(vec_temp, 4 + i, 1, false);
}
/*
for (int i = 0; i < rowNum; i++) {
	for (int j = 0; j < columnNum; j++) {
		sheet->SetCellValue(i + 1, j + 1, twoDimensionalArray[i][j]);
	}
}*/
printf("***************\n");

//自动调整列宽
sheet->GetAllocatedRange()->AutoFitColumns();

//将样式应用于第一行
//CellStyle* style = workbook->GetStyles()->Add(L"newStyle");
boost::intrusive_ptr<Spire::Xls::CellStyle> style = workbook->GetStyles()->Add(L"newStyle");
style->GetFont()->SetIsBold(true);
//sheet->GetRange(1, 1, 1, 6)->SetStyle(style);
//sheet->GetRange(4, 1, 4, 5)->SetStyle(style);
sheet->GetRange()->SetStyle(style);
sheet->GetRange()->SetStyle(style);

//保存文件
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();

} 程序终止的原因是在创建二维数组并赋值时,使用了data[i][j]来访问MYSQL_ROW类型的data数组。MYSQL_ROW是一个指向字符数组的指针,而不是wstring类型的数组。因此,尝试将MYSQL_ROW类型的字符数组直接赋值给wstring类型的数组会导致类型不匹配错误,从而导致程序终止。

要解决这个问题,需要将MYSQL_ROW类型的字符数组转换为wstring类型的字符串。可以使用std::wstring_convert类来进行转换,或者使用std::wstring的构造函数来进行转换。例如,可以使用以下代码来将字符数组转换为wstring类型的字符串:

twoDimensionalArray[i][j] = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(data[i][j]);

或者

twoDimensionalArray[i][j] = std::wstring(data[i][j], data[i][j] + strlen(data[i][j]));

通过这样的转换,可以将MYSQL_ROW类型的字符数组转换为wstring类型的字符串,从而解决类型不匹配的问题,使程序能够正常运行。

C++ 使用 Spire.Xls 将 MYSQL_ROW 数据写入 Excel 文件

原文地址: https://www.cveoy.top/t/topic/p7yZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录