2012-06-12 3 views
1

im пытается рисовать серию графиков в excel с использованием c. Проблема в том, что когда я пытаюсь сделать создание графиков в цикле, я должен изменить имя рабочих листов в excel. Но эти имена в формате _bstr_t:C: int to _bstr_t

pSheet->Name =name; 

Я хочу, чтобы сделать имя выглядеть примерно так («Номер листа% D», я), где я противопоказано. Я пробовал использовать sprintf и мог использовать другие методы, но не повезло.

Любая помощь будет оценена!

+1

Я думаю, вы должны использовать [функции BSTR] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069%28v=vs.85%29.aspx) для использования BSTR ... – sarnold

ответ

0

Сначала создайте массив символов с именем и затем назначьте его имени.

char arr[25]; 
sprintf(arr, "Sheet number %d", i); 
pSheet->Name = arr; 
0

Класс _bstr_t является ++ обертка класса C вокруг BSTR типа данных, который определяется как WCHAR *. См. Например, What's the difference between BSTR and _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, поскольку обычно это связано с вызовом функции вместо простой настройки атрибута. Понимание этого потребует от вас большего контекста.