cを使用してExcelで一連のプロットを描画しようとしています。問題は、プロットの作成をループに入れようとすると、Excel でワークシートの名前を変更する必要があることです。ただし、これらの名前は _bstr_t 形式です。
pSheet->Name =name;
名前を ("シート番号 %d",i) のようにしたいのですが、ここで i はカウンターです。私は sprintf と他の方法を使ってみましたが、うまくいきませんでした。
どんな助けでも大歓迎です!
最初に名前を使用して文字配列を作成し、次にそれをNameに割り当てます。
char arr[25];
sprintf(arr, "Sheet number %d", i);
pSheet->Name = arr;
クラス _bstr_t は、WCHAR * として定義されている BSTR データ型の C++ ラッパー クラスです。たとえば、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 シートの名前を設定することはあまりありません。これは、通常、単純に属性を設定するのではなく、関数を呼び出す必要があるためです。それを理解するには、あなたからのより多くのコンテキストも必要になります。