2016-08-24 7 views
0

私は区切り記号(|)で区切られた1列のすべての値を持つExcelシートを持っています。 Coumn1 | COLUMN2 | COLUMN3 | column4(この列名はExcelsheetの1行目にある) をvalue1 | value2の| value33 | value4シートの値を分割して新しいExcelシートに保存するにはどうすればいいですか?

val1と|| val3は| val4

私は値を分離分割し、作成したいです新しいExcelシートは分割された値を格納します。

新しいExcelシートでは値を取得したいと思います。

列1列2 COLUMN3 Column4

をvalue1の値2値3のvalue4私はthis.anyoneのような値が私は、このためのソリューションを与え得ることができますどのように

ヴァルval3はval4

私はExcelからデータを取得し、値をデータテーブルに格納します。 これは私が次のコードを使用していたためです。

public void LoadExcelData() 
     { 
     using (SPSite site = this.WebApplication.Sites[0]) 
     { 
      using (SPWeb currWeb = site.OpenWeb()) 
      { 
       string fullpath = ""; 
       SPQuery query = new SPQuery(); 
       SPList currList = currWeb.Lists.TryGetList("JDFieldMapping"); 
       SPListItemCollection itemColl = currList.GetItems(query); 
       query.ViewFields = string.Concat(
       "<FieldRef Name='FilePath' />"); 
       SPListItemCollection oItemCol = currList.GetItems(query); 
       string directorypath = ""; 


       foreach (SPListItem oItem in oItemCol) 
       { 
        directorypath = Convert.ToString(oItem["FilePath"]); 
        break; 
       } 

       var directory = new DirectoryInfo(directorypath); 
       var FilePath = (from f in directory.GetFiles() 
           orderby f.LastWriteTime descending 
           select f).First(); 

       string Filename = FilePath.ToString(); 

       fullpath = directorypath + Filename; 
       DataTable data = GetFileExtension(fullpath); 


      } 
     } 
     } 


     public DataTable GetFileExtension(string fullpath) 
     { 
      var FileFullpath = fullpath; 
      string fileExtension = Path.GetExtension(fullpath).ToUpper(); 
      string connectionString = ""; 

      if (fileExtension == ".XLS") 
      { 
       connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fullpath + "'; Extended Properties='Excel 8.0;HDR=YES;'"; 
      } 
      else if (fileExtension == ".XLSX") 
      { 
       connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fullpath + "';Extended Properties='Excel 12.0 Xml;HDR=YES;'"; 
      } 

      if (!(string.IsNullOrEmpty(connectionString))) 
      { 
       string[] sheetNames = GetExcelSheetNames(connectionString); 
       if ((sheetNames != null) && (sheetNames.Length > 0)) 
       { 

        OleDbConnection con = new OleDbConnection(connectionString); 
       // string status = "SELECT * FROM [" + sheetNames[0] + "]" + "WHERE [CAN Status] = 90;"; 
        string status = "SELECT * FROM [" + sheetNames[0] + "]"; 
        OleDbDataAdapter da = new OleDbDataAdapter(status, con); 
        dt = new DataTable(); 
        da.Fill(dt); 
        con.Close(); 
       } 
      } 
      return dt; 

     } 



    private string[] GetExcelSheetNames(string strConnection) 
     { 
      var connectionString = strConnection; 
      String[] excelSheets; 
      using (var connection = new OleDbConnection(connectionString)) 
      { 
       connection.Open(); 
       var dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       if (dt == null) 
       { 
        return null; 
       } 
       excelSheets = new String[dt.Rows.Count]; 
       int i = 0; 

       // Add the sheet name to the string array. 
       foreach (DataRow row in dt.Rows) 
       { 
        excelSheets[i] = row["TABLE_NAME"].ToString(); 
        i++; 
       } 
      } 
      return excelSheets; 
     } 
+0

に応じてExcelワークブックのパスを変更する必要があるだけでなく、カラム名?ここで本当の質問はありません – BugFinder

+0

シートを開き、データを読んで新しいシートに保存します。 – C4u

+0

私はうまく動作しているコードを追加しましたが、Excelシートではすべての値が区切られています。だから私はそれらの値を分割し、どちらか私はこれを行うことができますどのようにデータテーブルまたは新しいExcelシートに格納したいですか? – elina

答えて

0

次のコードを使用して、ExcelのデータをExcelの列でDATATABLEに取得できます。

System.Data.OleDb.OleDbConnection MyConnection ; 
System.Data.DataSet DtSet ; 
System.Data.OleDb.OleDbDataAdapter MyCommand ; 
MyConnection = new system.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.net-informations.xls';Extended Properties=Excel 8.0;"); 
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection); 
MyCommand.TableMappings.Add("Table", "TestTable"); 
DtSet = new System.Data.DataSet(); 
MyCommand.Fill(DtSet); 
dataGridView1.DataSource = DtSet.Tables[0]; 
MyConnection.Close(); 

注: -そんなにいただきました!あなたのコードが間違ってExcelスプレッドシート

チェックリンクの下

Read and Import Excel File into DataSet

+0

DATATABLEの列をExcelから取得すると、データを分割してDatatableまたは新しいExcelシートに保存します。 – elina

関連する問題