<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 25,  comments - 25,  trackbacks - 0
    VC操作Excel文件保存問題
    用VC對Excel文件進行寫操作后,在程序結束前需要對一些對象進行收尾工作,如調用_Workbook::Save()方法(該方法是Microsoft提供的供VC調用的對Excel文件操作的標準方法,在文件excel9.cpp或excel.cpp中定義)保存文件。
    問題就出現在這里,若選取要保存的Excel文件以前不存在則程序創建一個同名的空Excel文件,對Excel表的操作實際是對其同名副本的操作,Save()方法會觸發一個"另存為"的對話框,需要覆蓋原來同名的空Excel文件,否則寫入Excel的數據會丟失。若選取的Excel文件已經存在,則調用Save()方法不會觸發"另存為"對話框,系統會自動保存寫到Excel中的數據。
    需要說明的是,在調用Save()前,已經調用過SetAlertBeforeOverwriting(FALSE)和SetDisplayAlerts(FALSE)關掉一些警告窗口了。若調用SaveAs()方法,雖不會觸發"另存為"對話框,但會出拋出“找不到成員”的錯誤,這時保存寫好的Excel文件后并重新打開發現數據還是丟失。
    想盡所有辦法,可總無法去掉那個討厭的"另存為"對話框,請各位大蝦幫忙。多謝了!
    SaveAs()是excelapp的方法嗎。
    xlApp.ActiveWorkbook.SaveAs "C:\excel.xls" 
    xlApp.Quit
    我的沒有問題。
    如今Excel是越來越重要了,在我們自己開發的程序中不免要和Excel打交道了。利用Automation技術,我們可以在不去了解
    數據庫的情況下玩轉Excel,而且你會發現一切竟如此輕松!
        好了,咱們開始吧,我不喜歡用長篇累牘的代碼來故弄玄虛,所以下面的代碼都是切中要害的片段,總體上是個連貫的過程,
    包括啟動Excel,讀取數據,寫入數據,以及最后的關閉Excel,其中還包括了很多人感興趣的合并單元格的處理。
        特別說明以下代碼需要MFC的支持,而且工程中還要包含EXCEL2000的定義文件:EXCEL9.H,EXCEL9.CPP
    *****************************************************************************************************************
     //*****
     //變量定義
     _Application app;    
     Workbooks books;
     _Workbook book;
     Worksheets sheets;
     _Worksheet sheet;
     Range range;
     Range iCell;
     LPDISPATCH lpDisp;    
     COleVariant vResult;
     COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    
     
     
     //*****
     //初始化COM的動態連接庫
     if(!AfxOleInit())  
     {
            AfxMessageBox("無法初始化COM的動態連接庫!");
            return ;
         }   
     
     
     //*****
     //創建Excel 2000服務器(啟動Excel)
     if(!app.CreateDispatch("Excel.Application")) 
     {
      AfxMessageBox("無法啟動Excel服務器!");
        return;
     }
     
     app.SetVisible(TRUE);          //使Excel可見
     app.SetUserControl(TRUE);      //允許其它用戶控制Excel
     
     //*****   
     //打開c:\\1.xls
     books.AttachDispatch(app.GetWorkbooks());
     lpDisp = books.Open("C:\\\\1.xls",      
       covOptional, covOptional, covOptional, covOptional, covOptional,
       covOptional, covOptional, covOptional, covOptional, covOptional,
       covOptional, covOptional );    
      
         
     //*****
     //得到Workbook
     book.AttachDispatch(lpDisp);
     
     
     //*****
     //得到Worksheets 
     sheets.AttachDispatch(book.GetWorksheets()); 
     
     
     //*****
     //得到當前活躍sheet
     //如果有單元格正處于編輯狀態中,此操作不能返回,會一直等待
     lpDisp=book.GetActiveSheet();
     sheet.AttachDispatch(lpDisp); 
      
     //*****
     //讀取已經使用區域的信息,包括已經使用的行數、列數、起始行、起始列
     Range usedRange;
     usedRange.AttachDispatch(sheet.GetUsedRange());
     range.AttachDispatch(usedRange.GetRows());
     long iRowNum=range.GetCount();                   //已經使用的行數
     
     range.AttachDispatch(usedRange.GetColumns());
     long iColNum=range.GetCount();                   //已經使用的列數
      
     long iStartRow=usedRange.GetRow();               //已使用區域的起始行,從1開始
     long iStartCol=usedRange.GetColumn();            //已使用區域的起始列,從1開始
      
      
     //*****
     //讀取第一個單元格的值
     range.AttachDispatch(sheet.GetCells()); 
     range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
     COleVariant vResult =range.GetValue();
     CString str;
     if(vResult.vt == VT_BSTR)       //字符串
     {
      str=vResult.bstrVal;
     }
     else if (vResult.vt==VT_R8)     //8字節的數字 
     {
      str.Format("%f",vResult.dblVal);
     }
     else if(vResult.vt==VT_DATE)    //時間格式
     {
      SYSTEMTIME st;
         VariantTimeToSystemTime(&vResult.date, &st);
     }
     else if(vResult.vt==VT_EMPTY)   //單元格空的
     {
      str="";
     }  
     
     
     //*****
     //讀取第一個單元格的對齊方式,數據類型:VT_I4
     //讀取水平對齊方式
     range.AttachDispatch(sheet.GetCells());
     iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
     vResult.lVal=0;
     vResult=iCell.GetHorizontalAlignment();
     if(vResult.lVal!=0)
     {
      switch (vResult.lVal)
      {
      case 1:      //默認
       break;
      case -4108:  //居中
       break;
      case -4131 : //靠左
       break;
      case -4152 : //靠右
       break;
      }
     
     }
      
     //垂直對齊方式
     iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
     vResult.lVal=0;
     vResult=iCell.GetVerticalAlignment();
     if(vResult.lVal!=0)
     {
      switch (vResult.lVal)
      {
      case -4160 :  //靠上
       break;
      case -4108 :  //居中
       break;
      case -4107 :  //靠下
       break;
      }
     
     }
     
      
     //*****
     //設置第一個單元格的值"HI,EXCEL!"
     range.SetItem(COleVariant(1),COleVariant(1),COleVariant("HI,EXCEL!")); 
     
     //*****
     //設置第一個單元格字體顏色:紅色
     Font font;
     range.AttachDispatch(sheet.GetCells());
     range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
     font.SetColor(COleVariant((long)0xFF0000));  
     
     
     //*****
     //合并單元格的處理
     //包括判斷第一個單元格是否為合并單元格,以及將第一個單元格進行合并
     Range unionRange;
     range.AttachDispatch(sheet.GetCells()); 
     unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
      
     vResult=unionRange.GetMergeCells();    
     if(vResult.boolVal==-1)             //是合并的單元格    
     {
      //合并單元格的行數 
      range.AttachDispatch (unionRange.GetRows ());
      long iUnionRowNum=range.GetCount (); 
       
      //合并單元格的列數
      range.AttachDispatch (unionRange.GetColumns ());
      long iUnionColumnNum=range.GetCount ();   
      
      //合并區域的起始行,列
      long iUnionStartRow=unionRange.GetRow();       //起始行,從1開始
      long iUnionStartCol=unionRange.GetColumn();    //起始列,從1開始
      
     }
     else if(vResult.boolVal==0)   
     {//不是合并的單元格}
     
     //將第一個單元格合并成2行,3列
     range.AttachDispatch(sheet.GetCells()); 
     unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
     unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)2),COleVariant((long)3)));
     unionRange.Merge(COleVariant((long)0));   //合并單元格
     
     
     //*****
     //將文件保存為2.xls 
     book.SaveAs(COleVariant("C:\\\\2.xls"),covOptional,covOptional, \\
      covOptional,covOptional,covOptional,0,\\
      covOptional,covOptional,covOptional,covOptional);  
      
      
     //*****
     //關閉所有的book,退出Excel 
     book.Close (covOptional,COleVariant(OutFilename),covOptional);
     books.Close();      
     app.Quit();
    // Excel保存
            Sheet.OleProcedure("SaveAs", FName.c_str());
    www.ccrun.com里面有說道。
    學習
    posted on 2005-05-25 10:05 子玉 閱讀(2212) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2005年5月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(7)

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 黄页网站在线看免费| 免费欧洲美女牲交视频| 日本黄网站动漫视频免费| 日韩电影免费在线观看| 亚洲精品乱码久久久久久久久久久久| 老牛精品亚洲成av人片| 日本免费v片一二三区| 亚洲av无码偷拍在线观看| 国产一级一片免费播放i| 免费精品国产自产拍在线观看| 国产小视频免费观看| 香蕉视频免费在线播放| 亚洲精品无码99在线观看| 一级**爱片免费视频| 亚洲午夜无码久久久久| 污视频在线免费观看| 亚洲精品日韩专区silk| 欧美三级在线电影免费| 亚洲AV综合色区无码一二三区| 国产18禁黄网站免费观看| xxxxx做受大片视频免费| 亚洲中文字幕无码久久2017| 久久久精品免费视频| 亚洲色图在线播放| 嫩草影院在线免费观看| 一个人免费观看www视频| 欧洲亚洲国产清在高| 亚洲成人免费网站| 亚洲欧美中文日韩视频| 亚洲毛片av日韩av无码| 91福利视频免费观看| 久久乐国产综合亚洲精品| 亚洲国产成人五月综合网| 日本免费电影一区二区| 色天使亚洲综合在线观看| 久99精品视频在线观看婷亚洲片国产一区一级在线| 一级午夜免费视频| 67194在线午夜亚洲| 亚洲免费一区二区| 最近最新MV在线观看免费高清| 国产亚洲女在线线精品|