欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格

 更新時(shí)間:2024年03月22日 08:48:39   作者:初九之潛龍勿用  
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

應(yīng)用場(chǎng)景

存儲(chǔ)或?qū)С鰝€(gè)人WORD版簡(jiǎn)歷是招聘應(yīng)用系統(tǒng)中的常用功能,我們通常會(huì)通過應(yīng)用系統(tǒng)采集用戶的個(gè)人簡(jiǎn)歷信息到數(shù)據(jù)庫(kù),許多情況下我們會(huì)讀取數(shù)據(jù)記錄導(dǎo)出到WORD文件中,以便匯總、打印。其中,WORD表格元素是經(jīng)常會(huì)被用到的,比如問卷調(diào)查表格、教育經(jīng)歷表格、工作經(jīng)歷表格等等。

設(shè)計(jì)約定

1、設(shè)計(jì)WORD模板,在需要輸出值的地方繪制表格,表格的數(shù)量對(duì)應(yīng)輸出的數(shù)據(jù)表數(shù)量。

2、根據(jù)條件查詢數(shù)據(jù)表,生成 DataSet ,遍歷 Tables ,生成對(duì)應(yīng)的二維數(shù)組集合,將數(shù)據(jù)輸出到對(duì)應(yīng)的WORD表格中。

3、按約定,WORD表格的數(shù)量應(yīng)該大于等于 DataSet 里的 Tables 數(shù)量。

4、按參數(shù)設(shè)定對(duì)應(yīng)的WORD表格ID序號(hào),如參數(shù)設(shè)定為2,則表示輸出到WORD文件中的第二個(gè)表格中。(注意:WORD表格序號(hào)以1為開始)

在輸出寫入的方式中,我們約定有兩種方式:

一為覆蓋式寫入(即已預(yù)知數(shù)據(jù)輸出模式)舉例如下圖:

二為動(dòng)態(tài)式寫入(即未知數(shù)據(jù)行數(shù)量)舉例如下圖:

范例運(yùn)行環(huán)境

操作系統(tǒng): Windows Server 2019 DataCenter

操作系統(tǒng)上安裝 Office Word 2016

數(shù)據(jù)庫(kù):Microsoft SQL Server 2016

.net版本: .netFramework4.7.1 或以上

開發(fā)工具:VS2019  C#

配置Office DCOM

配置方法可參照我的文章《C# 讀取Word表格到DataSet》進(jìn)行處理和配置。

實(shí)現(xiàn)代碼

組件庫(kù)引入

核心代碼

DataSet轉(zhuǎn)二維數(shù)組

public object[,] DataSetToObjectData(DataSet ds,int TableId,bool hastitle),該方法提供3個(gè)參數(shù),DataSet數(shù)據(jù)集、指定表索引、導(dǎo)出是否包含標(biāo)題列名稱。

        public object[,] DataSetToObjectData(DataSet ds,int TableId,bool hastitle)
        {
            ArrayList rowdata = new ArrayList();
            int _fieldcount=ds.Tables[TableId].Columns.Count;
            Object[] colvalues = new Object[_fieldcount];
            for(int i=0;i<_fieldcount;i++)
            {
                colvalues[i]=ds.Tables[TableId].Columns[i].ColumnName;
            }
            if(hastitle)
                rowdata.Add(colvalues);
            for(int i=0;i<ds.Tables[TableId].Rows.Count;i++)
            {
                Object[] values = new Object[_fieldcount];
                values=ds.Tables[TableId].Rows[i].ItemArray;
                rowdata.Add(values);
                RowsCount++;
            }
            object[,] rv=new object[rowdata.Count,_fieldcount];
            for(int i=0;i<rowdata.Count;i++)
            {
                for(int j=0;j<_fieldcount;j++)
                {
                    rv[i,j]=((object[])rowdata[i])[j];
                }
            }
            return rv;
        }

導(dǎo)出寫入WORD表格

public string DataSetToWordTables(string _filename,int[,] _drawtype,object[] _datas),該方法提供3個(gè)參數(shù),使用的WORD模板文件路徑、寫入配置(包括要寫入的WORD表格ID,寫入方式:0為覆蓋;1為從第二行動(dòng)態(tài)追加;3為從第一行動(dòng)態(tài)追加)、對(duì)應(yīng)的二維數(shù)組集合。

public string DataSetToWordTables(string _filename,int[,] _drawtype,object[] _datas)        {
            Object Nothing = System.Reflection.Missing.Value;
            object filename = _filename;
            //創(chuàng)建一個(gè)名為WordApp的組件對(duì)象
            Word.Application WordApp = new Word.Application();
            //創(chuàng)建一個(gè)名為WordDoc的文檔對(duì)象
            WordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
 
            Word.Document WordDoc = WordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
 
            WordDoc.SpellingChecked = false;//關(guān)閉拼寫檢查
 
            WordDoc.ShowSpellingErrors = false;//關(guān)閉顯示拼寫錯(cuò)誤提示框
 
                for(int i=_drawtype.GetLength(0)-1;i>=0;i--)
                {
                    int _tableid=_drawtype[i,0];
                    int _draw=_drawtype[i,1];
                    object[,] r_datas=(object[,])_datas[i];
                    int _rowscount=r_datas.GetLength(0);
                    if (_rowscount == 0)
                    {
                        WordDoc.Tables[_tableid].Delete();
                        continue;
                    }
                    int startrowid = 2;
                    if (_draw == 3)
                    {
                        startrowid = 1;
                    }
                    if(_draw==1||_draw==3)
                    {
                        object _row=(object)WordDoc.Tables[_tableid].Rows[startrowid];
                        for(int j=0;j<_rowscount-1;j++)
                        {
                            WordDoc.Tables[_tableid].Rows.Add(ref _row);
 
                        }
                    }
                    for (int k = 0; k < r_datas.GetLength(0); k++)
                    {
                        for(int m=0;m<r_datas.GetLength(1);m++)
                        {
                            WordDoc.Tables[_tableid].Cell(k + startrowid, m + 1).Range.Text = r_datas[k, m].ToString();
                        }
                    }
                }
 
            WordDoc.Save();
            WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
            //關(guān)閉WordApp組件對(duì)象
            WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
    return "";
}

調(diào)用舉例

如下為示例代碼:

string _filename=@"x:\test.docx";
int[,] _drawtype=new int[2,2];
_drawtype[0,0]=1;  //寫入WORD第一個(gè)表格
_drawtype[0,1]=0;  //覆蓋式寫入
 
_drawtype[1,0]=2;  //寫入WORD第二個(gè)表格
_drawtype[1,1]=1;  //動(dòng)態(tài)追加行寫入
 
object[] _datas=new object[2];
DataSet ds=getDataSet(); //獲取DataSet對(duì)象
_datas[0]=DataSetToObjectData(ds,0,false); //獲取DataSet Tables[0]的二維數(shù)組數(shù)據(jù)
_datas[1]=DataSetToObjectData(ds,1,false); //獲取DataSet Tables[1]的二維數(shù)組數(shù)據(jù)
 
string result=DataSetToWordTables(_filename,_drawtype,_datas);  //寫入Word表格        

小結(jié)

1、核心代碼中對(duì)無數(shù)據(jù)的表格采取了刪除WORD表格的操作。

2、預(yù)設(shè)表格的優(yōu)點(diǎn)在于所見即所得,樣式設(shè)計(jì)簡(jiǎn)單化,便于理解輸出,我們還可以采用關(guān)鍵字定位并動(dòng)態(tài)添加WORD表格的形式進(jìn)行輸出,來實(shí)現(xiàn)更加復(fù)雜的樣式等。

3、核心代碼中輸出的起始行為第2行,根據(jù)設(shè)置也可以為第1行。如果我們?cè)O(shè)計(jì)的表格比較復(fù)雜(如包括合并單元格等),則可以對(duì) _drawtype進(jìn)行改造,增加一個(gè)參數(shù),用于指定從第幾行開始進(jìn)行輸出。

到此這篇關(guān)于C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格的文章就介紹到這了,更多相關(guān)C#讀取二維數(shù)組并輸出到Word內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼的示例代碼

    C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼的示例代碼

    區(qū)位碼是一個(gè)4位的十進(jìn)制數(shù),每個(gè)區(qū)位碼都對(duì)應(yīng)著一個(gè)唯一的漢字,區(qū)位碼的前兩位叫做區(qū)碼,后兩位叫做位碼,下面我們就來看看如何使用C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼吧
    2024-01-01
  • c#實(shí)現(xiàn)flv解析詳解示例

    c#實(shí)現(xiàn)flv解析詳解示例

    本文提供的解析程序簡(jiǎn)單的把FLV分解了出來,如果要做FLV的修改操作的話,可以給每個(gè)類加個(gè)toStream方法,再歷遍依次調(diào)用就可以寫回到文件里了
    2014-01-01
  • 基于C#?實(shí)現(xiàn)?OPC?DA?Server的問題小結(jié)

    基于C#?實(shí)現(xiàn)?OPC?DA?Server的問題小結(jié)

    這篇文章主要介紹了基于C#?實(shí)現(xiàn)?OPC?DA?Server的相關(guān)知識(shí),關(guān)于C#怎么編寫一個(gè)進(jìn)程外的DCOM組件,這里先不做介紹了,這里主要介紹下OPC?DA?Server?的第一個(gè)接口,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • WPF自定義控件實(shí)現(xiàn)ItemsControl魚眼效果

    WPF自定義控件實(shí)現(xiàn)ItemsControl魚眼效果

    這篇文章主要為大家詳細(xì)介紹了WPF如何通過自定義控件實(shí)現(xiàn)ItemsControl魚眼效果,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2024-01-01
  • WPF使用HLSL實(shí)現(xiàn)百葉窗動(dòng)畫效果

    WPF使用HLSL實(shí)現(xiàn)百葉窗動(dòng)畫效果

    百葉窗動(dòng)畫是制作PPT時(shí)常用的動(dòng)畫之一,本文將通過實(shí)現(xiàn)百葉窗動(dòng)畫效果的例子介紹在WPF中如何使用ShaderEffect,感興趣的小伙伴可以了解一下
    2023-09-09
  • C#多態(tài)的三種實(shí)現(xiàn)方式(小結(jié))

    C#多態(tài)的三種實(shí)現(xiàn)方式(小結(jié))

    這篇文章主要介紹了C#多態(tài)的三種實(shí)現(xiàn)方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C#中線程安全問題的調(diào)試和解決

    C#中線程安全問題的調(diào)試和解決

    在C#中,多線程編程是一種常見且強(qiáng)大的工具,但它帶來了線程安全的問題,本文將介紹如何調(diào)試和解決C#中的線程安全問題,并深入探討鎖機(jī)制、并發(fā)控制以及調(diào)試的最佳實(shí)踐,需要的朋友可以參考下
    2025-03-03
  • C#實(shí)現(xiàn)無損壓縮圖片代碼示例

    C#實(shí)現(xiàn)無損壓縮圖片代碼示例

    這篇文章介紹了C#實(shí)現(xiàn)無損壓縮圖片的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#拷貝整個(gè)文件夾及子目錄和其中文件的方法

    C#拷貝整個(gè)文件夾及子目錄和其中文件的方法

    這篇文章主要介紹了C#拷貝整個(gè)文件夾以及子目錄和其中文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • C#保存與讀取DataTable信息到XML格式的方法

    C#保存與讀取DataTable信息到XML格式的方法

    這篇文章主要介紹了C#保存與讀取DataTable信息到XML格式的方法,實(shí)例分析了C#讀取DataTable信息到XML格式及讀取XML格式數(shù)據(jù)到DataTable的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08

最新評(píng)論