最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

應用場景

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

設計約定

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

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

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

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

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

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

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

范例運行環(huán)境

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

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

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

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

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

配置Office DCOM

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

實現(xiàn)代碼

組件庫引入

核心代碼

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

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

        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;
        }

導出寫入WORD表格

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

public string DataSetToWordTables(string _filename,int[,] _drawtype,object[] _datas)        {
            Object Nothing = System.Reflection.Missing.Value;
            object filename = _filename;
            //創(chuàng)建一個名為WordApp的組件對象
            Word.Application WordApp = new Word.Application();
            //創(chuàng)建一個名為WordDoc的文檔對象
            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;//關閉拼寫檢查
 
            WordDoc.ShowSpellingErrors = false;//關閉顯示拼寫錯誤提示框
 
                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);
            //關閉WordApp組件對象
            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第一個表格
_drawtype[0,1]=0;  //覆蓋式寫入
 
_drawtype[1,0]=2;  //寫入WORD第二個表格
_drawtype[1,1]=1;  //動態(tài)追加行寫入
 
object[] _datas=new object[2];
DataSet ds=getDataSet(); //獲取DataSet對象
_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表格        

小結

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

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

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

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

相關文章

  • C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼

    C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼

    這篇文章主要介紹了C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼,代碼中就一個循環(huán),循環(huán)的判斷是從一個函數(shù)獲取值,需要的朋友可以參考下
    2018-06-06
  • WPF通過線程使用ProcessBar的方法詳解

    WPF通過線程使用ProcessBar的方法詳解

    這篇文章主要給大家介紹了關于WPF通過線程使用ProcessBar的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用WPF具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別

    詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別

    本篇文章主要介紹了詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。
    2017-02-02
  • C#向無窗口的進程發(fā)送消息

    C#向無窗口的進程發(fā)送消息

    這篇文章主要介紹了C#向無窗口的進程發(fā)送消息 的相關資料,需要的朋友可以參考下
    2016-05-05
  • C#中的委托詳解

    C#中的委托詳解

    本文詳細講解了C#中的委托,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# 向二進制文件進行讀寫的操作方法

    C# 向二進制文件進行讀寫的操作方法

    該例子使用 BinaryStream 和 BinaryWriter 對二進制文件進行讀寫操作先上代碼再根據(jù)我理解的所分享給各位朋友
    2013-04-04
  • C#實現(xiàn)文件上傳及文件下載功能實例代碼

    C#實現(xiàn)文件上傳及文件下載功能實例代碼

    文件上傳文件下載需求在項目中經(jīng)常會遇到,今天小編給大家分享C#實現(xiàn)文件上傳及文件下載功能實例代碼,需要的朋友參考下吧
    2017-08-08
  • c# delegate和event的使用說明

    c# delegate和event的使用說明

    這篇文章主要介紹了c# delegate和event的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#之Socket操作類實例解析

    C#之Socket操作類實例解析

    這篇文章主要介紹了C#的Socket操作類用法,需要的朋友可以參考下
    2014-08-08
  • C#聯(lián)合VisionPro實現(xiàn)TCP/IP通信詳解

    C#聯(lián)合VisionPro實現(xiàn)TCP/IP通信詳解

    TCP/IP(傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)是一組用于在網(wǎng)絡上進行通信的通信協(xié)議,本文主要為大家詳細介紹了C#如何聯(lián)合VisionPro實現(xiàn)TCP/IP通信,希望對大家有所幫助
    2024-02-02

最新評論

准格尔旗| 牡丹江市| 罗源县| 嵊泗县| 韶山市| 三河市| 拜泉县| 灌云县| 苏尼特右旗| 濉溪县| 包头市| 宾阳县| 德安县| 剑川县| 宣化县| 临朐县| 迭部县| 涞源县| 古田县| 泸州市| 布尔津县| 鄂州市| 宁强县| 宝清县| 吉水县| 武安市| 西丰县| 乾安县| 河北省| 濮阳市| 津南区| 鹤壁市| 龙泉市| 密云县| 科尔| 尖扎县| 蓬溪县| 海阳市| 孝昌县| 河北省| 万山特区|