谁会用代码生成一个Excel文件? 使得该文件与右键-->新建-->Excel工作表 生成的文件一样?CFile execfile;
execfile.Open(path,CFile::modeCreate);这种方法是不行的,它生成的大小为0,右键...生成的有十几K大小.OLE生成方式:先生成几个CFile型的.xls文件,再用Workbooks的Add方法添加到Excel 框架中去,效果也很差.请比较有经验的人指教一下,不然该帖又要无果而终了.

解决方案 »

  1.   

    vckbase有徐景周的翻译的文章
    但是有内存泄露问题
      

  2.   

    用于 Microsoft Office 系统的 Visual Studio 工具   如何:创建新的工作簿
    Microsoft Office Excel 2003 中的 Workbooks 集合使您可以使用所有打开的工作簿、创建新的工作簿以及向新的工作簿中导入数据。创建新工作簿 使用 Workbooks 集合的 Add 方法: 
    ' Visual Basic
    Dim wb As Excel.Workbook = ThisApplication.Workbooks.Add()// C#
    Excel.Workbook workbook = ThisApplication.Workbooks.Add(Type.Missing);
    也可以将工作簿模板的名称指定为 Add 方法的参数。
      

  3.   

    如何:向工作簿中添加新工作表
    可以向 Microsoft Office Excel 2003 工作簿中添加新工作表,或创建现有工作表的副本。Add 方法允许您向工作簿中的工作表集合中添加新工作表。向工作簿中添加新工作表 使用 Sheets 集合的 Add 方法: 
    ' Visual Basic
    Dim sh As Excel.Worksheet
    sh = ThisWorkbook.Worksheets.Add()// C#
    Excel.Worksheet newWorkSheet;
    newWorkSheet = 
        (Excel.Worksheet)ThisWorkbook.Worksheets.Add(
        Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    Copy 方法创建工作表的副本,并将该工作表插入到您指定的位置。如果愿意,您可以指定将新工作表插到现有工作表的前面或后面。如果不指定,Excel 将创建一个新工作簿来容纳该新的工作表。 向工作簿中添加复制的工作表 以下代码复制当前工作簿中的第一个工作表,并将副本置于第三个工作表后面。 
    ' Visual Basic
    ThisApplication.ActiveWorkbook.Sheets(1).Copy( _
        After:=ThisApplication.ActiveWorkbook.Sheets(3))// C#
    ThisApplication.ActiveWorkbook.Sheets[1].Copy(Type.Missing,
        ThisApplication.ActiveWorkbook.Sheets[3]);
      

  4.   

    可以通过增加一段 excel 宏,
    在宏里面操作你需要的过程,
    然后查看宏内容得到你需要的方法 ....
      

  5.   

    OLE生成方式:先生成几个CFile型的.xls文件,再用Workbooks的Add方法添加到Excel 框架中去,效果也很
    效果差是什么意思
      

  6.   

    你理解为不行就是了.请问一个Excel提供的接口有成千上万, MSDN中都有相应的注解吗?
    我的MSDN2001可是很多东西都没有.
      

  7.   

    先Mark一下,看看大家的方法!
      

  8.   

    其实,就满足楼主的要求而言,我第一个想到的方法就是按正常方式生成一个空的Excel文件,再把它当成资源加入工程,要自己创建的时候就把资源读出并写入一个文件,就是另一个空的Excel文件了。怕大家说解决方案没有一点技术含量,才迟迟不好意思发上来(不过,我个人还是觉得最简单、最直接、最省事、最可靠的方法就是最好的方法!)。大致代码如下(测试通过):
    ---------------------------------------------------------------------------------------
    HGLOBAL        hGlobal = NULL;
    HRSRC        hSource = NULL;
    LPVOID        lpVoid  = NULL;
    int            nSize   = 0; // 1. 从资源中读取资源文件数据
    hSource = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(IDC_NewExcelFile), _T("BlankExcelFile"));
    if(hSource == NULL)
    {
    AfxMessageBox("找不到资源");
    return;
    }
    hGlobal = LoadResource(AfxGetResourceHandle(), hSource);
    if(hGlobal == NULL)
    {
    AfxMessageBox("无法装载资源");
    return;
    }
        
    lpVoid = LockResource(hGlobal);
    if(lpVoid == NULL)
    {
    AfxMessageBox("试图获得资源指针时失败");
    return;
    } //获取资源的大小,以便后面分配相应大小内存并写入文件
    nSize = (UINT)SizeofResource(AfxGetResourceHandle(), hSource); // 2. 分配内存并拷贝数据
    HGLOBAL hGlobalMem = GlobalAlloc(GMEM_MOVEABLE, nSize);
    if(hGlobalMem == NULL)
    {
    AfxMessageBox("内存分配失败");
    return;
    }
        
    void* pData = GlobalLock(hGlobalMem);
    memcpy(pData, (BYTE*)hGlobal, nSize);
    GlobalUnlock(hGlobalMem); //把资源内容写入指定文件f:\newfile
    CFile file("f:\\newfile.xls",CFile::modeCreate|CFile::modeWrite);
    file.Write(pData,nSize);
    file.Close(); //释放资源
    UnlockResource(hGlobal); 
    FreeResource(hGlobal); 
    FreeResource(hGlobalMem);
    ---------------------------------------------------------------------------------------
      

  9.   

    楼上的不错.
    我当时使用OLE,调用EXCEL的,很慢.
    不知有没有*.xls文件格式供大家参考?
      

  10.   

    // 与EXCEL文件关联输出余料信息
        _Application       ExcelApp;           // 定义Excel应用程序
        Workbooks          wbsBooks;
        _Workbook          wbBook;
        Worksheets         wssSheets; 
        _Worksheet         wsSheet;
        Range              rngXls;
        Range              rngEnter;
        c_Font               font;               // 字体
        Borders            border;             // 边框    if (::CoInitialize( NULL ) == E_INVALIDARG)
        {
            AfxMessageBox(_T("初始化Com失败!"));
            return;
        }     // 创建Excel2000服务器(启动Excel)
        if ( !ExcelApp.CreateDispatch(_T("Excel.Application"), NULL))
        {
            AfxMessageBox(_T("创建Excel2000服务失败!"));
            ::CoUninitialize();
            return;
        }
        
       有这些类后,就可以使用ADD方法添加表格了,前面需要加入OFFICE自动化
      

  11.   

    看过DBGridEh么?Delphi下的,里面利用Tab分隔列,追加数据,类似于处理文本操作,后缀为xls,不用ole,速度很快
      

  12.   

    1. CStdioFile f( lpszFileName,
      CFile::modeCreate | CFile::modeWrite | CFile::typeText );
    lpszFileName="yourexcel.xls"2.用OLE Automation _Application ExcelApp; 
    Workbooks wbsMyBooks; 
    _Workbook wbMyBook; 
    Worksheets wssMysheets; 
    _Worksheet wsMysheet; 
    Range rgMyRge,range;
    CString strDatLineText;
    COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  

    if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 

    AfxMessageBox("创建Excel服务失败!"); 
    exit(1); 
    }
      

  13.   

    OLE效果差,感觉是数据量大会很慢很慢
      

  14.   

    http://www.cppblog.com/azhisoft/azhisoft/articles/419.html