Using C # to implement Excel import and export instances tutorial

Source: Internet
Author: User
Tags httpcontext reflection rowcount save file serialization set background first row

1. Introduce

1.1 Third party class library: Npoi

Description: Npoi is a. NET version of the POI project and can be used for Excel, Word read and write operations.

Advantages: Do not install Office environment.

Download Address: http://npoi.codeplex.com/releases

Introduction to 1.2 Excel structure

Workbook (Workbook): Each Excel file can be understood as a workbook.

Sheet (Sheet): A workbook (Workbook) can contain more than one worksheet.

Row: A worksheet (Sheet) can contain multiple rows.


2. Excel Import

2.1 Operation Flow


2.2 Npoi Operation code

Description: Convert Excel file to list

Steps:

① reads the Excel file and initializes a workbook (workbook);

② Gets a worksheet (Sheet) from the workbook, and defaults to the first worksheet in the workbook;

③ traverses all rows of the worksheet (row); The default starts at the second line, and the first row (ordinal 0) is the cell header;

④ traverses each cell of the row, assigning values to the properties of the object according to certain rules.

Code:

+ View Code

2.3 C # Logical operation code

Description: Follow up on Excel converted list: Detection validity, persistent storage, etc.

Steps:

① calls the 2.2 code to convert the Excel file to list.

② the list for validation: whether the required items are empty, whether there are duplicate records, and so on.

③ the list for persistent storage operations. such as: Store to database.

④ returns the result of the operation.

Code:

Public void importexcel (httpcontext context) {    StringBuilder  Errormsg = new stringbuilder (); //  error message     try      {           #region  1. Get Excel file and convert to a list collection            // 1.1 store Excel files to local server          httppostedfile filepost = context. request.files["filed"]; //  get uploaded files         string  Filepath = excelhelper.saveexcelfile (filepost); //  save file and get file path            //  Cell Header         //  Key: Entity object attribute name, can get value by reflection         // value: attribute corresponding Chinese annotation          dictionary<string, string> cellheader = new dictionary<string, string> {             {  "name",  "name"  },              {  age ", "  },              {  "Gendername",  "Gender"  },              {  "Transcriptsen.chinesescores",  "language Achievement"  },              {  "Transcriptsen.mathscores",  "Mathematical Results"  },  
       };           // 1.2 parsing file, stored in a list collection          List<UserEntity> enlist = ExcelHelper.ExcelToEntityList<
Userentity> (CELLHEADER, FILEPATH, OUT ERRORMSG);     &NBSp;      #endregion            #region   2. Validation of the list collection            #region  2.1 inspection required must fill            for  (int i = 0; i < enlist. count; i++)         {       
     UserEntity en = enlist[i];             string errorMsgStr =  "section
" +  (i + 1)  + " Row Data detection exception: ";             bool ishavenoinputvalue =  false; //  contains no entries             if   (String. IsNullOrEmpty (en. Name))            &nbsP {                ERRORMSGSTR
 +=  "Name column cannot be empty;";                 
ishavenoinputvalue = true;             }              if  (Ishavenoinputvalue)  //  if the required fields are not filled in,              {                 en.
isexcelvaildateok = false;                 
Errormsg.appendline (ERRORMSGSTR);             }         &NBSP}            #endregion &NBSp          #region  2.2 detect duplicate objects in Excel            for  (int i = 0; i < enlist. count; i++)         {       
     UserEntity enA = enlist[i];             if  (ena.isexcelvaildateok ==  false)  //  above verify does not pass, do not perform this step validation              {                
Continue             }                for  (int j = i + 1; j <  enlist. count; j++)      &NBsp;      {           
     UserEntity enB = enlist[j];                 //  Determine if required columns are all repeated                 if   (Ena.name == enb.name)                  {              
      enA.IsExcelVaildateOK = false;                   
  enB.IsExcelVaildateOK = false;                      errormsg.appendline ("First"  +  (i + 1)  +  "line with the first"  +  (j + 1)  +  "line of the required column repeated");                 }   
          }         }            #endregion            // todo: Other testing            #endregion            // 3.todo: Persistent storage operations on the list collection. such as: Store to database                   
 4. Return action Results         bool isSuccess = false;         if  (errormsg.length == 0)          {     &NBsp;      issuccess = true; //  error message if Chengdu is empty, indicates no error message          }         var rs =  New { success = issuccess,  msg = errormsg.tostring (), data 
= enlist };         system.web.script.serialization.javascriptserializer js
 = new system.web.script.serialization.javascriptserializer ();         context.
response.contenttype =  "Text/plain";         context. Response.Write (JS. Serialize (RS)); //  returns the contents of JSON format     }     catch  (Exception  ex)     {  throw ex;     }



3. Excel Export

3.1 Export process


3.2 Npoi Operation code

Description: Convert list to Excel

Steps:

① Create a workbook (workbook);

② Create a worksheet (Sheet) on the workbook;

③ creates the first row (row) on the worksheet, the first behavior column header, and then writes the Cellheard value (as the column name).

④ loops through the list collection, creates a row (row) at a time, and then stores the values from the entity objects in the list to the cell according to the Cellheard key (the property name).

Code:

 <summary>///  entity class collection is exported to Excle2003/// </summary>/// <param name= " Cellheard "> Unit header Key and value:{ { " UserName ", " name " }, { " Age ", " ages "   };</param>/// <param name= "enList" > Data source </param>/// <param name= " SheetName "> Worksheet name </param>/// <returns> file download address </returns> public static string  entitylisttoexcel2003 (Dictionary<string, string> cellheard, ilist enlist,  string sheetname) {    try     {         string fileName = sheetName +  "-"  +  DateTime.Now.ToString ("yyyymmddhhmmssfff")  +  ". xls"; //  file name          string urlPath =  "upfiles/excelfiles/"  + fileName; //  File download URL address, provide front desk download   &nbsP;     string filepath = httpcontext.current.server.mappath ("\"   + urlpath); //  file path           // 1. Detects if a folder exists. Create a folder if it doesn't exist         string directoryName = 
Path.getdirectoryname (FilePath);         if  (! Directory.Exists (directoryname))         {    
        directory.createdirectory (directoryname);        &NBSP}           //  2. Resolve cell headers, set the Chinese name of the cell header         hssfworkbook workbook =  new hssfworkbook (); //  Workbook         ISheet  Sheet = workbook. Createsheet (sheetname); //  worksheet &nbSp;       irow row = sheet.
CreateRow (0);         list<string> keys = cellheard.keys.tolist
();         for  (Int i = 0; i < keys . count; i++)         {             row. Createcell (i).
Setcellvalue (Cellheard[keys[i]]); //  A value with column name key         }   The value of the         // 3.list object is assigned to the cell in Excel          int rowIndex = 1; //  assignment starting from the second line (the first row is set to the cell header)          foreach  (var en in enlist)          {            irOw rowtmp = sheet.
CreateRow (RowIndex);             for  (int i = 0;  i < keys. count; i++)  //  Gets the value of the specified property of the object, based on the specified property name              {                 string cellvalue =  the value of the; //  cell           Value of        object properotyValue = null; //  property                   Information for system.reflection.propertyinfo properotyinfo = null; //  properties                    // 3.1  if the name of the property header contains '. ', is the attribute in the subclass, it is necessary to traverse the subclass, Eg:UserEn.UserName                 if  (Keys[i]. IndexOf (".")  >= 0)                  {                     // 3.1.1  parsing Subclass attributes (only 1-layer subclasses are parsed, and multi-layer subclasses are not processed)                      string[] properotyarray =  keys[i]. Split (new string[] {  ".")
 }, stringsplitoptions.removeemptyentries);                      string subClassName = properotyArray[0]; //  '. ' The previous name for the subclass                      string subclassproperotyname = properotyarray[1]; //  '. ' The property name followed by the subclass                      system.reflection.propertyinfo subclassinfo = en. GetType (). GetProperty (Subclassname); //  Gets the type of the subclass                      if  (subclassinfo != null)                       {                         // 3.1.2  getting instances of subclasses                          var  subclassen = en. GetType (). GetProperty (Subclassname). GetValue (En, null);                          // 3.1.3  gets the attribute type in the subclass based on the property name                          
Properotyinfo = subclassinfo.propertytype.getproperty (Subclassproperotyname);                          if  (properotyinfo != null)                           {                             properotyValue =  Properotyinfo.getvalue (subclassen, null);  //  Gets the value of the Child class property                          }                      }                  }                  else                  {                     // 3.2  If you are not a property of a subclass, get the corresponding property of the object directly based on the property name                      properotyinfo  = en. GetType ().
GetProperty (Keys[i]);                     if  (properotyinfo != null)                      {                     
    properotyvalue = properotyinfo.getvalue (En, null);                   
  }                 }                   //  3.3  property values are converted to cell values                  if  (properotyvalue != null)                 &nBsp {                  
  cellvalue = properotyvalue.tostring ();                      // 3.3.1  assignment to time initial value is null                      if  (Cellvalue.trim ()  ==  "0001/1/1  0:00:00 " | |  cellvalue.trim ()  ==  "0001/1/1 23:59:59")                      {                         
cellvalue =  "";                      }                 }                    // 3.4  Fill in the cells in Excel                  Rowtmp.createcell (i).
Setcellvalue (Cellvalue);             }       
      rowIndex++;        &NBSP}           //  4. Generate Files         FileStream file = new 
FileStream (filepath, filemode.create);         workbook.
Write (file);         file.
Close ();           // 5. Back to download Path         return urlpath;    &NBSP}     catch  (Exception ex)     { 
       throw ex;    &NBSP}}

3.3 C # Logical operation code

Description: Follow up on Excel converted list: Detection validity, persistent storage, etc.

Steps:

① Gets the list collection.

② calls 3.2 to convert the list to an Excel file.

The ③ server stores the Excel file and returns the download link.

Code:

Public void exportexcel (httpcontext context) {    try      {        // 1. Get Data collection          List<UserEntity> enlist = new List<UserEntity> ()  {             new userentity{name= "Liu Yi", Age=22,Gender= "Male", Transcriptsen=new transcriptsentity{chinesescores=80,mathscores=90}},              new userentity{name= "Chen er", age=23,gender= "Male", TRANSCRIPTSEN=NEW TRANSCRIPTSENTITY{CHINESESCORES=81,MATHSCORES=91}&NBSP},              new userentity{name= "John", Age=24,gender= "Male", TranscriptsEn=new  TRANSCRIPTSENTITY{CHINESESCORES=82,MATHSCORES=92}&NBSP},              new&nBsp Userentity{name= "Dick", age=25,gender= "Male", Transcriptsen=new transcriptsentity{chinesescores=83,mathscores =93} },             new userentity{name= "
Harry ", age=26,gender=" Male ", transcriptsen=new transcriptsentity{chinesescores=84,mathscores=94} },
        };           // 2. Set cell Header          // key: Entity object property name, can get value through reflection         //  Name of the Value:excel column         Dictionary<string, string>  cellheader = new dictionary<string, string> {             {  "name",  "name"  },              {  age ", "  },             {  "Gendername",  "Gender"  },              {  "Transcriptsen.chinesescores",  "language Achievement"  } ,             {  "Transcriptsen.mathscores",
  "Math Score"  },         };           // 3. Perform Excel conversion operations and return the converted file Download link          string urlpath = excelhelper.entitylisttoexcel2003 (Cellheader,
 enlist,  "student Achievement");         system.web.script.serialization.javascriptserializer js
 = new system.web.script.serialization.javascriptserializer ();         context.
response.contenttype =  "Text/plain";         context. Response.wrIte (JS. Serialize (URLPath)); //  returns JSON-formatted content     }     catch  (
EXCEPTION EX)     {        throw ex;    &NBSP}}

3.4 Code Analysis

The core code is primarily the mapping relationship between Cellheader and list:


4. SOURCE download

4.1 Run diagram






Another reference to import and export operations on Excel in C # is also very useful


First, take a look at the most common import operation bar!

private void import () {          //Open Excel selection box       OpenFileDialog frm = new 
OpenFileDialog ();        frm.
filter =  "Excel file (*.xls,xlsx) |*.xls;*.xlsx";        if  (frm. ShowDialog ()  == dialogresult.ok)        {                            string excelname = frm.
FileName;           workbook excel = new workbook (
Excelname);           list<string[]> importystring=
Getimportexcelroute (Excel); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP}} 

 

Loop through gets the value of each column in Excel &nbsp;&nbsp; Public&nbsp;list&lt;string[]&gt;&nbsp;getimportexcelroute (workbook&nbsp;excel ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;int&nbsp;icount&nbsp;=&nbsp;excel.
Worksheets.count; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&lt;string[]&gt;&nbsp;routlist
&nbsp;=&nbsp;new&nbsp;List&lt;string[]&gt; (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp; (int&nbsp;i&nbsp;=&nbsp;0; &nbsp;i&nbsp;&lt;&nbsp;icount;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Worksheet&nbsp;sheet&nbsp;=&nbsp;excel.
Worksheets[i]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cells&nbsp; Cells&nbsp;=&nbsp;sheet.
Cells; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbSp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;rowcount&nbsp;=&nbsp;cells.
MaxRow; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp; Columncount&nbsp;=&nbsp;cells.
Maxcolumn; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;
routnamecolumn&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;
routattachcolumn&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;
routdesccolumn&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;
routmesgcolumn&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get the column where the title is located &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (ROWCOUNT &nbsp;&gt; &nbsp;0&nbsp;&amp;&amp;&nbsp;columncount&nbsp;&gt;&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//find the corresponding column information &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;r0&nbsp;=&nbsp;2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;for&nbsp; (int&nbsp;c&nbsp;=&nbsp;0;&nbsp;c&nbsp;&lt;=&nbsp;columncount;&nbsp;c++) &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;STRING&NBSP;STRVAL&NBSP;=&NBSP;CELLS[R0,&NBSP;C].
Stringvalue.trim (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if&nbsp; (strval&nbsp;==&nbsp; "Remarks") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routDescColumn&nbsp;=&nbsp;c; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0&nbsp;=&nbsp;3; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;for&nbsp; (int&nbsp;c&nbsp;=&nbsp;0;&nbsp;c&nbsp;&lt;=&nbsp;columncount;&nbsp;c++) &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Get text box content &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strval&nbsp;= &NBSP;CELLS[R0,&NBSP;C].
Stringvalue.trim (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (strval&nbsp;==&nbsp; "approval details") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routNameColumn&nbsp;=&nbsp;c; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (strval&nbsp;==&nbsp; "Fine Items") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routmesgcolumn
&nbsp;=&nbsp;c; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (strval&nbsp;==&nbsp; "preconditions and work requirements") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routAttachColumn&nbsp;=&nbsp;c; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//find the value below the corresponding header column &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (routnamecolumn&nbsp;&gt;&nbsp;0&nbsp; &amp;&amp;&nbsp;routattachcolumn&nbsp;&gt;&nbsp;0&nbsp;&amp;&amp;&nbsp;routdesccolumn&nbsp;&gt;&nbsp;0) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{//to find the corresponding value from the corresponding column &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp; (int&nbsp;r&nbsp;=&nbsp;4;&nbsp;r&nbsp; &lt;=&nbsp;rowcount;&nbsp;r++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;string[]&nbsp;str&nbsp;=&nbsp;new&nbsp;string[6]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strRoutName&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strRoutMesg&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strRoutAttach&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strRoutDesc&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strroutrole&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strRoutPro&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp; (int&nbsp;c&nbsp;=&nbsp;0;&nbsp;c&nbsp; &lt;=&nbsp;columncount;&nbsp;c++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;mergcolumncount&nbsp;=&nbsp;0
; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;mergrowcount&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;ismerged&nbsp;= &NBSP;CELLS[R,&NBSP;C]. ismerged;//whether to merge cells &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &nbsp; (ismerged) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;RANGE&NBSP;RANGE&NBSP;=&NBSP;CELLS[R,&NBSP;C].
Getmergedrange (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &nbsp; (Range&nbsp;!=&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergcolumncount&nbsp;=&nbsp;range.
ColumnCount; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mergrowcount&nbsp;=&nbsp;range.
ROWCOUNT; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Get text box content &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strVal&nbsp;=&nbsp; "";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strval&nbsp;=&nbsp;cells[r , &nbsp;c].
Stringvalue.trim (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (c&nbsp;==&nbsp; Routnamecolumn) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
strroutname&nbsp;=&nbsp;strval; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (mergrowcount&nbsp;&gt;&nbsp;1&nbsp;&amp;&amp;&nbsp;string. IsNullOrEmpty (strroutname)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strroutname&nbsp;=&nbsp;getroutname (routList,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (C&nbsp;==&nbsp;routmesgcolumn) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strRoutMesg&nbsp;=&nbsp;strVal; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (mergrowcount&nbsp;&gt;&nbsp;1&nbsp;&amp;&amp;&nbsp; String. IsNullOrEmpty (STRROUTMESG)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strroutmesg&nbsp;=&nbsp;getroutname (routList,&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (C&nbsp;==&nbsp;routattachcolumn) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strRoutAttach&nbsp;=&nbsp;strVal; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (C&nbsp;==&nbsp;routdesccolumn) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strRoutDesc&nbsp;=&nbsp;strVal; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;} 




can see that the import is relatively simple, that is, to iterate through the values of each column in each row, you can see a lot of Cells this attribute, which requires a third party plug-in: using Aspose.cells; need to download a A aspose.cells DLL.

Two, export, which is to combine data into Excel format:

Private&nbsp;void&nbsp;export () {&nbsp;&nbsp;&nbsp;&nbsp;SaveFileDialog&nbsp;frm&nbsp;=&nbsp;new&nbsp;
SaveFileDialog (); &nbsp;&nbsp;&nbsp;&nbsp;frm.
filter&nbsp;=&nbsp; "Excel file (*.xls,xlsx) |*.xls;*.xlsx"; &nbsp;&nbsp;&nbsp;&nbsp;frm.
filename&nbsp;=&nbsp;flowname&nbsp;+&nbsp; ". xlsx"; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (frm. ShowDialog () &nbsp;==&nbsp;dialogresult.ok) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp;strpath&nbsp;=&nbsp;frm.
FileName;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbook&nbsp;workbook&nbsp;=&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strpath&nbsp;=&nbsp;_exportFlowRoutExcelPath; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (File.exists (strpath)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workbook&nbsp;=&nbsp;new&nbsp;workbook (
strpath); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;workbook&nbsp;=&nbsp;new&nbsp;workbook (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;worksheet&nbsp;sheet &nbsp;=&nbsp;workbook. worksheets[0];&nbsp;//worksheet &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells&nbsp;cells&nbsp;=&nbsp;sheet. cells;//cell &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;str= "";//get the data to export &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routexporttoexcel (WORKBOOK,CELLS,STR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messagebox.show ("Export success!")
"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messagebox.show ("Export failed!")
"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;}



 

Public&nbsp;void&nbsp;routexporttoexcel (WORKBOOK&NBSP;WORKBOOK,&NBSP;CELLS&NBSP;CELLS,STRING&NBSP;STR) {&nbsp;
&nbsp;&nbsp; Get rows and columns &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;routCount&nbsp;=0;//;
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;rowcount&nbsp;=&nbsp;4&nbsp;+&nbsp;routCount;
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;columnCount&nbsp;=&nbsp;25; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp; (int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;rowcount;&nbsp;i++) &nbsp; &nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Style&nbsp;style&nbsp;=&nbsp;
Settingcellstyle (Workbook,&nbsp;cells); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (i&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.
font.color&nbsp;=&nbsp;color.red; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.
font.size&nbsp;=&nbsp;16; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells. Merge (0,&NBsp;0,&nbsp;1,&nbsp;columncount)//Merge cell &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &NBSP;CELLS[I,&NBSP;0]. Putvalue ("Integrated Pipeline decision Authorization System matters")/fill in the content &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells[0 , &nbsp;0]. SetStyle (style),//To the cell association style &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells. Setrowheight (0,&nbsp;38);//Set row height &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells. Setcolumnwidth (1,&nbsp;20);//Set column width &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (i&nbsp;&gt;&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;routeName&nbsp;=&nbsp; "";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;routeNote&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;routecondition&nbsp;=&nbsp; "";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;guid&nbsp;=&nbsp; ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (i&nbsp;&gt;&nbsp;3) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells. Setrowheight (i,&nbsp;42)//Set row height &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;JsonObject&nbsp;routJsonObj&nbsp;=&nbsp;routeJsonArray[i&nbsp;-&nbsp;4]&nbsp;as&nbsp;
Jsonobject; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routename &nbsp;=&nbsp;routjsonobj["Routname" "]&nbsp;==&nbsp;null&nbsp;?&nbsp;" "&nbsp;:&nbsp;routjsonobj[" RoutName "].
ToString (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routenote &nbsp;=&nbsp;routjsonobj["Note"]&nbsp;==&nbsp;null&nbSP;? &nbsp; "" &nbsp;:&nbsp;routjsonobj["note"].
ToString (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routecondition &nbsp;=&nbsp;routjsonobj["Condition" "]&nbsp;==&nbsp;null&nbsp;?&nbsp;" "&nbsp;:&nbsp;routjsonobj[" condition "].
ToString (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;guid&nbsp;= &nbsp;routjsonobj["GUID"]&nbsp;==&nbsp;null&nbsp;?&nbsp; "" &nbsp;:&nbsp;routjsonobj["GUID".
ToString (); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp; (int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;columncount; &nbsp;j++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;CELLS[I,&NBSP;J]. SetStyle (style)//To cell association style &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&Nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Fill Row &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (i&nbsp;&gt;&nbsp;3) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (j&nbsp;==&nbsp;0)//serial number &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;CELLS[I,&NBSP;J]. Putvalue (i&nbsp;-&nbsp;3)/fill in content &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp; (j&nbsp;==&nbsp;4&nbsp;| | &nbsp;j&nbsp;==&nbsp;5&nbsp;| | &NBSP;J&NBSP;==&NBSP;24)//Approval detail &nbsp; Details &nbsp; notes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Fillexcelroutproperty (i,j,style,cells,routename,routenote,routecondition); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp; (j&nbsp;==&nbsp;2&nbsp;| | &nbsp;j&nbsp;==&nbsp;3&nbsp;| | &nbsp;j&nbsp;==&nbsp;6&nbsp;| | &nbsp;j&nbsp;==&nbsp;7&nbsp;| | &nbsp;j&nbsp;==&nbsp;8&nbsp;| | &nbsp;j&nbsp;==&nbsp;10&nbsp;| | &nbsp;j&nbsp;==&nbsp;11&nbsp;| | &nbsp;j&nbsp;==&nbsp;12&nbsp;| | &NBSP;J&NBSP;==&NBSP;13)//category, classification, level or plate, region, pipeline, precondition responsible department and responsible person, audit proof and acceptance responsibility Departmentand the responsible person, the specific audit proofreading acceptance request, the Promoter &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillexcelroutextproperty (i,&nbsp;j,&nbsp;
Guid,&nbsp;style,&nbsp;cells,routextpropertyjsonarray); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp; (j&nbsp;&gt;=&nbsp;14&nbsp;&amp;&amp;&nbsp;j&nbsp;&lt;=&nbsp;23)// Route role variables (from approver 1 to CFA) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillexcElroutroleval (I,j,guid,style,cells,routrolevaljsonarray); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp; (j&nbsp;==&nbsp;9)//Front conditions and job requirements &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;fillexcelroutpreconditon (I,j,guid,style,cells,routpreconditonjsonarray); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbSp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Settingcellstyleandline (CELLS,&NBSP;I,&NBSP;J)//Set the header row and column of Excel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&lt;summary&gt;///&nbsp; Set cell styles and lines///&nbsp;&lt;/summary&gt;///&nbsp;&lt;param&nbsp;name= "Cells" &gt; &lt;/param&gt;///&nbsp;&lt;param&nbsp;name= "i" &gt;&lt;/param&gt;///&nbsp;&lt;param&nbsp;name= "J" &gt;&lt;/param &gt; Public&nbsp;void&nbsp;settingcellstyleandline (cells&nbsp;cells,&nbsp;int&nbsp;i,&nbsp;int&nbsp;j) {&nbsp; &nbsp;&nbsp;&nbsp;if&nbsp; (i&nbsp;==&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if&nbsp; (j&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells. Merge (1,&nbsp;j,&nbsp;3,&nbsp;1)//merged cells &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &NBSP;CELLS[I,&NBSP;J]. Putvalue ("serial number");//fill in the content &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cells. Setcolumnwidth (j,&nbsp;5);//Set column width &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp; (j&nbsp;==&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;cells. Merge (1,&nbsp;j,&nbsp;3,&nbsp;1)//merged cells &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;cells. Setcolumnwidth (j,&nbsp;5);//Set column width &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;}



&nbsp;&lt;summary&gt;///&nbsp; Set the style of the cell///&nbsp;&lt;/summary&gt;///&nbsp;&lt;param&nbsp;name= "Workbook" &gt;
&lt;/param&gt;///&nbsp;&lt;param&nbsp;name= "Cells" &gt;&lt;/param&gt;///&nbsp;&lt;returns&gt;&lt;/returns&gt; Public&nbsp;style&nbsp;settingcellstyle (workbook&nbsp;workbook,&nbsp;cells&nbsp;cells) {&nbsp;&nbsp;&nbsp; &nbsp;style&nbsp;style&nbsp;=&nbsp;workbook. Styles[workbook. Styles.add ()];//new style &nbsp;&nbsp;&nbsp;&nbsp;style. horizontalalignment&nbsp;=&nbsp;textalignmenttype.center;//text centered &nbsp;&nbsp;&nbsp;&nbsp;style. font.name&nbsp;=&nbsp; "Song body";//Text font &nbsp;&nbsp;&nbsp;&nbsp;style. font.size&nbsp;=&nbsp;10;//Text Size &nbsp;&nbsp;&nbsp;&nbsp;style. islocked&nbsp;=&nbsp;false;//Unit Gejian &nbsp;&nbsp;&nbsp;&nbsp;style. font.isbold&nbsp;=&nbsp;false;//Bold &nbsp;&nbsp;&nbsp;&nbsp;style. Foregroundcolor&nbsp;=&nbsp;color.fromargb (255,&nbsp;255,&nbsp;255);/Set background color &nbsp;&nbsp;&nbsp;&nbsp;style. pattern&nbsp;=&nbsp;backgroundtype.solid;&nbsp;//sets the background style &nbsp;&nbsp;&nbsp;&nbsp;style. Istextwrapped&nbsp;=&nbsp;true;//the cell content to wrap &nbsp;&nbsp;&nbsp;&nbsp;style. Borders[bordertype.leftborder]. linestyle&nbsp;=&nbsp;cellbordertype.thin;&nbsp;//applies boundary &nbsp; left boundary &nbsp;&nbsp;&nbsp;&nbsp;style. Borders[bordertype.rightborder]. linestyle&nbsp;=&nbsp;cellbordertype.thin;&nbsp;//applies boundary &nbsp; right border &nbsp;&nbsp;&nbsp;&nbsp;style. Borders[bordertype.topborder]. linestyle&nbsp;=&nbsp;cellbordertype.thin;&nbsp;//applies border &nbsp; upper boundary &nbsp;&nbsp;&nbsp;&nbsp;style. Borders[bordertype.bottomborder].
linestyle&nbsp;=&nbsp;cellbordertype.thin;&nbsp;//applied border &nbsp; lower boundary &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;style; }


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.