1

cを使用してExcelで一連のプロットを描画しようとしています。問題は、プロットの作成をループに入れようとすると、Excel でワークシートの名前を変更する必要があることです。ただし、これらの名前は _bstr_t 形式です。

    pSheet->Name =name;

名前を ("シート番号 %d",i) のようにしたいのですが、ここで i はカウンターです。私は sprintf と他の方法を使ってみましたが、うまくいきませんでした。

どんな助けでも大歓迎です!

4

2 に答える 2

0

最初に名前を使用して文字配列を作成し、次にそれをNameに割り当てます。

char arr[25];
sprintf(arr, "Sheet number %d", i);
pSheet->Name = arr;
于 2012-06-12T03:42:51.580 に答える
0

クラス _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 シートの名前を設定することはあまりありません。これは、通常、単純に属性を設定するのではなく、関数を呼び出す必要があるためです。それを理解するには、あなたからのより多くのコンテキストも必要になります。

于 2012-06-13T03:26:29.037 に答える