我正在尝试使用 c 在 excel 中绘制一系列图。问题是当我尝试在循环中制作绘图时,我必须在 excel 中更改工作表的名称。但这些名称采用 _bstr_t 格式:
pSheet->Name =name;
我想让 name 看起来像 ("Sheet number %d",i),其中 i 是计数器。我尝试使用 sprintf 和其他方法,但没有运气。
任何帮助,将不胜感激!
_bstr_t 类是一个围绕 BSTR 数据类型的 C++ 包装类,它被定义为 WCHAR *。参见例如BSTR 和 _bstr_t 有什么区别?. 如果您正在使用 C,那么您对 _bstr_t 的引用可能不正确,您应该要求转换为 BSTR。
以下代码行可以为您做到这一点:
DWORD len;
BSTR bstrPtr;
char sheetName[25];
/* Construct the name of your sheet as a regular string */
sprintf(sheetName, "Sheet number %d", i);
/* Count the number of bytes in the WChar version of your name
by doing a dummy conversion */
len = MultiByteToWideChar(CP_ACP, 0, sheetName, -1, 0, 0);
/* Allocate the BSTR with this size */
bstrPtr = SysAllocStringLen(0, len);
/* Do the actual conversion of the sheetName into BSTR */
MultiByteToWideChar(CP_ACP, 0, sheetName, -1, bstrPtr, len);
/* Do your stuff... */
/* Deallocate the BSTR */
SysFreeString(bstrPtr);
如果您对 _bstr_t 的引用是正确的并且此代码没有回答您的问题,那么请发布您正在使用的头文件的片段,显示name
属性的定义。此外,该语句pSheet->Name = name
不太可能设置 Excel 工作表的名称,因为这通常涉及调用函数而不是简单地设置属性。理解这一点也需要您提供更多背景信息。
首先用名称创建一个字符数组,然后将其分配给名称。
char arr[25];
sprintf(arr, "Sheet number %d", i);
pSheet->Name = arr;