描述:
找了一些用com 操作 excel 的资料,
都是用模板才能产生新的 .xls文件,
谁能给一个不用模板的例子, 给出关键的代码片断就行,
比如
//////////////////////
_Application app;
app.CreateDispatch("Excel.Application",NULL);
Workbooks workbooks =app.GetWorkbooks();
_Workbook workbook = workbooks.Add(_variant_t("d:\\a\\Book1.xls"));
/////////////////////////
add 是 打开已经存在的 文件, 如何 不用模板 创建新的文件呢?
谢谢
解决方案1:
DWORD WINAPI CExportXLSDlg::_ExportThread(LPVOID pParameter)
{
CExportXLSDlg *pDlg = (CExportXLSDlg*)pParameter;
_Application *pExcelApp;
Workbooks objExcelBooks;
Sheets objExcelSheets;
_Workbook objWorkBook;
_Worksheet objWorkSheet;
Range objRange;
COleVariant varOptional(DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant varTrue((short)TRUE);
COleVariant varFalse((short)FALSE);
MSG msg;
CString strText;
int nMilliTime = 0;
int nSequence = 0, nLastSequence = -1;
int nRow = 1;
int i;
double dblValue[TOTAL_CHANNEL_NUM];
CoInitialize(NULL); // ÒòΪ¶ÔÓÚCOM²Ù×÷±ØÐë¶Ôÿ¸öÏß³ÌÒýÓà COM ¿â
pDlg->m_staticProgress.SetWindowText(_T("ÕýÔÚ´´½¨ExcelʵÀý..."));
pExcelApp = new _Application;
pExcelApp->CreateDispatch(_T("Excel.Application")); // ´´½¨ Excel Ó¦ÓóÌÐò
objExcelBooks = pExcelApp->GetWorkbooks();
objExcelSheets = objExcelBooks.Add(varOptional);
objWorkBook.AttachDispatch(pExcelApp->GetApplication());
objExcelSheets = objWorkBook.GetSheets();
// Ïȵ¼³öÀúÊ·Êý¾ÝÏà¹ØÐÅÏ¢
pDlg->m_staticProgress.SetWindowText(_T("ÕýÔÚµ¼³öÀúÊ·Êý¾ÝÐÅÏ¢..."));
objWorkSheet = objExcelSheets.GetItem(COleVariant((short)1));
objWorkSheet.SetName(_T("ÀúÊ·Êý¾ÝÐÅÏ¢"));
objWorkSheet.Activate();
__ExportInfomation(objWorkSheet);
// µ¼³öÀúÊ·ÊÔÑéÊý¾Ý
pDlg->m_staticProgress.SetWindowText(_T("ÕýÔÚµ¼³öÀúÊ·ÊÔÑéÊý¾Ý..."));
objWorkSheet = objExcelSheets.GetItem(COleVariant((short)2));
objWorkSheet.SetName(_T("ÊÔÑéÊý¾Ý"));
objWorkSheet.Activate();
__ExportDataHead(objWorkSheet);
nSequence = 0;
while (nSequence < g_nHistoryCount)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
}
if (nSequence > nLastSequence)
{
nRow ++;
__GetTimeString(nSequence, strText);
__SetExcelCellText(objWorkSheet, nRow, 1, strText, 1, 2);
__GetHistoryRecord(nSequence, dblValue);
strText.Format(_T("%.3f"), dblValue[BASEID_COOL]);
__SetExcelCellText(objWorkSheet, nRow, 3, strText);
for (i=0; i<T_CHANNEL_NUM; i++)
{
strText.Format(_T("%.3f"), dblValue[BASEID_T + i]);
__SetExcelCellText(objWorkSheet, nRow, 4+i, strText);
}
for (i=0; i<K_CHANNEL_NUM; i++)
{
strText.Format(_T("%.3f"), dblValue[BASEID_K + i]);
__SetExcelCellText(objWorkSheet, nRow, 50+i, strText);
}
for (i=0; i<A_CHANNEL_NUM; i++)
{
strText.Format(_T("%.3f"), dblValue[BASEID_A + i]);
__SetExcelCellText(objWorkSheet, nRow, 58+i, strText);
}
strText.Format(_T("%d / %d"), nSequence, g_nHistoryCount);
pDlg->m_staticProgress.SetWindowText(strText);
pDlg->m_slidProgress.Value = nSequence * 100.0 / g_nHistoryCount;
nLastSequence = nSequence;
}
nMilliTime += pDlg->m_nMilliSecond;
nSequence = nMilliTime * (g_sHistoryConfig.dblHighSampleRate / PCI9114_CHANNELS / 1000.0);
}
// Çл»»Øµ½ÀúÊ·ÐÅÏ¢Ò³
objWorkSheet = objExcelSheets.GetItem(COleVariant((short)1));
objWorkSheet.Activate();
pExcelApp->SetVisible(TRUE); // ÏÔʾ Excel Ó¦ÓóÌÐò
delete pExcelApp;
CoUninitialize(); // ÒòΪ¶ÔÓÚCOM²Ù×÷±ØÐë¶Ôÿ¸öÏß³ÌÒýÓà COM ¿â
pDlg->m_hThread = NULL;
::PostMessage(pDlg->m_hWnd, WM_CLOSE, 0, 0);
return 0;
}