<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

    主站蜘蛛池模板: 国产免费看JIZZ视频| 黄色网站软件app在线观看免费| 91精品免费在线观看| 亚洲情a成黄在线观看动漫尤物| a级毛片免费在线观看| 国产亚洲午夜高清国产拍精品| 国产成人久久精品亚洲小说| 免费国产真实迷j在线观看| 国产亚洲综合视频| 亚洲无码高清在线观看| 一个人看的www免费在线视频| 亚洲高清最新av网站| 精品国产污污免费网站入口| 亚洲国产精品无码久久久秋霞2| 久久免费看少妇高潮V片特黄| 久久亚洲精品成人AV| 成人免费看片又大又黄| 边摸边吃奶边做爽免费视频网站 | 久久精品国产亚洲77777| 最近最新高清免费中文字幕| 97免费人妻在线视频| 亚洲综合久久成人69| 成人午夜18免费看| 日韩成人毛片高清视频免费看| 在线亚洲97se亚洲综合在线 | 最近高清中文字幕无吗免费看| 亚洲综合偷自成人网第页色| 国产猛烈高潮尖叫视频免费| 成人无码视频97免费| 久久久亚洲欧洲日产国码二区 | 亚洲区日韩精品中文字幕| 亚洲成片观看四虎永久| 日韩电影免费在线观看| 亚洲精品又粗又大又爽A片| 久久综合亚洲色HEZYO国产| 69av免费观看| 免费人成又黄又爽的视频在线电影| 亚洲av福利无码无一区二区| 毛片免费视频播放| 丁香花在线观看免费观看图片| 亚洲字幕在线观看|