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

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

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

    ice world

    There is nothing too difficult if you put your heart into it.
    posts - 104, comments - 103, trackbacks - 0, articles - 0

    C#操作word總結(jié)

    Posted on 2011-04-16 13:38 IceWee 閱讀(1183) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Others
    最近有個(gè)小項(xiàng)目中自己負(fù)責(zé)word報(bào)表的生成,開(kāi)發(fā)語(yǔ)言是C#,我是做JAVA的,臨時(shí)用一下而已。發(fā)現(xiàn)微軟的在線(xiàn)MSDN是個(gè)好東西,很強(qiáng)大,基本需要的東西都在里面可以找到,比如word的創(chuàng)建、打開(kāi)、關(guān)閉等等一系列的操作DEMO代碼。

    我主要是將現(xiàn)有的模板填入數(shù)據(jù)保存文檔即可。主題是TABLE填值,檢索TABLE主要是通過(guò)下標(biāo),如:

    WordDoc.Tables[6]

    其中WordDoc的類(lèi)型是Word.Document,就是當(dāng)前操作的word文檔,上面的代碼是獲取當(dāng)前文檔中的第六個(gè)表格,這里要注意一下, 我們慣性會(huì)認(rèn)為是第七個(gè)表格,但這就是微軟的不同,沒(méi)有采用數(shù)組索引的方式,如果當(dāng)初數(shù)組也這么設(shè)計(jì),下標(biāo)從1開(kāi)始,我們學(xué)習(xí)的時(shí)候不知道省多少事。

    開(kāi)發(fā)過(guò)程中遇到了一個(gè)小難題就是合并單元格(縱向),沒(méi)有設(shè)計(jì)橫向的合并,現(xiàn)將合并的代碼貼出來(lái)備用:

    /// <summary>
    /// 縱向單元格合并 
    /// 說(shuō)明:如合并了第一行第一列和第二行第一列兩個(gè)單元格,則單元格cell(2, 1)已經(jīng)不存在,繼續(xù)操作會(huì)有異常, 
    /// 只有通過(guò)cell(1, 1)來(lái)獲取合并后的單元格 
    /// /<summary>
    /// <param name="table"></param>
    /// <param name="startRowIndex"></param>
    /// <param name="columnIndex"></param>

    private static void verticalCellMerge(Word.Table table, int startRowIndex, int columnIndex)
    {    
        
    string previousText = table.Cell(startRowIndex++, columnIndex).Range.Text;    // 保存對(duì)比文字    
        int previousRowIndex = startRowIndex - 1;    // 因剛已經(jīng)+1了,所以再減回去    
        for (int i = startRowIndex; i <= table.Rows.Count; ++i) // 遍歷所有行的columnIndex列,發(fā)現(xiàn)相同的合并,從起始行的下一行開(kāi)始對(duì)比    
        {        
            
    string currentText = table.Cell(i, columnIndex).Range.Text;        
            
    if (previousText.Equals(currentText))        
            
    {            
                table.Cell(previousRowIndex, columnIndex).Merge(table.Cell(i, columnIndex)); 
    // 合并先前單元格和當(dāng)前單元格            
                table.Cell(previousRowIndex, columnIndex).Range.Text = currentText;    // 因?yàn)楹喜⒑蟛](méi)有將單元格內(nèi)容去除,需要手動(dòng)修改            
                table.Cell(previousRowIndex, columnIndex).Select();            
                WordApp.Selection.ParagraphFormat.Alignment 
    = WdParagraphAlignment.wdAlignParagraphCenter;    // 水平居中顯示            
                table.Cell(previousRowIndex, columnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中        
            }
            
            
    else        
            
    {            
                previousText 
    = currentText; // 將對(duì)比文字替換為當(dāng)前的內(nèi)容            
                previousRowIndex = i;   // 檢索到不同的內(nèi)容,將當(dāng)前行下標(biāo)置為先前行下標(biāo),用于合并        
            }
        
        }

    }


    /// <summary>
    /// 橫向單元格合并
    /// 注意:在合并單元格后必須將縱列數(shù)減去1
    /// 如第一行第一列和第一行第二列合并后,原第一行第三列將變成第一行第二列,這就是在合并后i不加1的原因
    /// </summary>
    /// <param name="WordApp"></param>
    /// <param name="table"></param>
    /// <param name="startColumnIndex"></param>
    /// <param name="rowIndex"></param>

    private static void horizontalCellMerge(Word.Application WordApp, Word.Table table, int startColumnIndex, int rowIndex)
    {    
        
    string previousText = table.Cell(rowIndex, startColumnIndex).Range.Text;    // 保存對(duì)比文字    
        int previousColumnIndex = startColumnIndex++;    // 保存先前對(duì)比列下標(biāo)    
        int colCount = table.Columns.Count;    
        
    for (int i = startColumnIndex; i <= colCount;) // 遍歷所有行的columnIndex列,發(fā)現(xiàn)相同的合并,從起始行的下一行開(kāi)始對(duì)比    
        {        
            
    string currentText = table.Cell(rowIndex, i).Range.Text;        
            
    if (previousText.Equals(currentText))        
            
    {            
                table.Cell(rowIndex, previousColumnIndex).Merge(table.Cell(rowIndex, i)); 
    // 合并先前單元格和當(dāng)前單元格            
                table.Cell(rowIndex, previousColumnIndex).Range.Text = currentText;    // 因?yàn)楹喜⒑蟛](méi)有將單元格內(nèi)容去除,需要手動(dòng)修改            
                table.Cell(rowIndex, previousColumnIndex).Select();            
                WordApp.Selection.ParagraphFormat.Alignment 
    = WdParagraphAlignment.wdAlignParagraphCenter;    // 水平居中顯示            
                table.Cell(rowIndex, previousColumnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中            
                --colCount;        
            }
            
            
    else        
            
    {            
                previousText 
    = currentText; // 將對(duì)比文字替換為當(dāng)前的內(nèi)容            
                previousColumnIndex = i++;   // 檢索到不同的內(nèi)容,將當(dāng)前行下標(biāo)置為先前行下標(biāo),用于合并        
            }
        
        }

    }

    方法注釋已經(jīng)很詳細(xì)就不再贅述。

    最后遇到的問(wèn)題是無(wú)格式的段落檢索,因?yàn)樵谏蓤?bào)告的時(shí)候需要在某些段落后填寫(xiě)測(cè)試的結(jié)論,這下又把我難住了,最終終于發(fā)現(xiàn)了bookmark這個(gè)東東,起始我對(duì)word并不熟悉,都不知道它有書(shū)簽的功能。順便就愛(ài)你個(gè)檢索書(shū)簽的方法貼出來(lái):

    /// <summary>
    /// 在整個(gè)文檔中根據(jù)書(shū)簽名檢索書(shū)簽對(duì)象
    /// </summary>
    /// <param name="name"></param>

    private static Word.Bookmark getBookmarkByName(string name)  
    {      
        
    foreach (Word.Bookmark bm in WordDoc.Bookmarks)      
        
    {          
            
    if (bm.Name.Equals(name))              
                
    return bm;          
            }
              
            
    return null;      
        }
      


    例:

    Word.Bookmark bm = getBookmarkByName(bookmarkName);  
    bm.Range.Text 
    = "你好"// 將檢索到書(shū)簽的內(nèi)容替換為“你好”

    這就是這次用C#做word報(bào)表的全部問(wèn)題,貌似都是小問(wèn)題。

    最后需要看具體的word操作demo代碼請(qǐng)?jiān)L問(wèn)MSDN,貼個(gè)網(wǎng)址:

    http://msdn.microsoft.com/zh-cn/library/78whx7s6(VS.80).aspx

    主站蜘蛛池模板: 麻豆亚洲AV永久无码精品久久| 亚洲国产午夜福利在线播放 | 国产自国产自愉自愉免费24区 | 国产亚洲精品va在线| 51午夜精品免费视频| 浮力影院亚洲国产第一页| 国产精品高清免费网站| 亚洲一区二区三区自拍公司| 中文字幕视频在线免费观看| 亚洲第一极品精品无码久久| 国产免费AV片在线观看| 久久亚洲私人国产精品vA | 国产精品亚洲五月天高清| 免费h成人黄漫画嘿咻破解版| 美女又黄又免费的视频| 国产福利电影一区二区三区,亚洲国模精品一区| 精品在线视频免费| 丁香五月亚洲综合深深爱| 男人都懂www深夜免费网站| 亚洲日韩乱码久久久久久| 巨胸喷奶水视频www网免费| 综合一区自拍亚洲综合图区| 亚洲人成网站色在线入口| 免费看一区二区三区四区 | 精品视频免费在线| 国产亚洲精品国产| 免费看黄视频网站| 免费人成又黄又爽的视频在线电影| 亚洲国产一级在线观看 | 亚洲免费综合色在线视频| 色天使色婷婷在线影院亚洲| 国产中文在线亚洲精品官网| 99精品视频免费在线观看| 亚洲一区二区三区写真| 亚洲欧洲日产国码av系列天堂| 18禁美女裸体免费网站| 真正全免费视频a毛片| 久久精品亚洲一区二区三区浴池 | 亚洲精品精华液一区二区 | 亚洲国产综合第一精品小说| 国产精品另类激情久久久免费 |