2016-06-21 8 views
1

したがって、私のプログラムは.csvと.xlsxという2つのファイルタイプを取ります。 ファイル内のデータが検証されるかどうかを調べる2つのメソッドがあります。ファイルが検証された場合はtrueを返します。csvを変更してワークブックをExcelに戻し、同じファイルに戻す方法は?

これ以外の場合はfalseを返すだけでなく、追加の列を追加したい場合は というエラーが表示され、特定のエラーメッセージがセルに書き込まれます。 |例えば

Data.csvはもともと好きに見える場合は、この 最初の行は、G

A列名ですB | C | D | E | F |データ・タイプが行に間違っている場合G

行1

行2

行3

....

行と列と仮定すると、0

をインデックスされます3列B(セル[4] [1])と2列G(セル[2] [6])の列を作成すると、Hと呼ばれるGの後に列を作成したい。何のメッセージを間違えた。

Like

A | B | C | D | E | F | G | H |

行1

行2 Bはここ

は私の方法で...... Gが間違ったタイプ

である

間違ったタイプの3行目で

私はxlsxのExcel Interlopを使用しています

private bool FileValidatorXlsx() 
    { 
     Excel.Application xlApp = new Excel.Application(); 
     Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(_filename, ReadOnly: true); 
     foreach (Excel.Worksheet xlWorksheet in xlWorkbook.Worksheets) 
     { 
      Excel.Range xlRange = xlWorksheet.UsedRange; 
      int rowCount = xlRange.Rows.Count; 
      int colCount = xlRange.Columns.Count; 

      for (int i = 2; i <= rowCount; i++) 
      { 
       string row = ""; 
       for (int j = 1; j <= colCount; j++) 
       { 
        if (xlRange.Cells[i, j].Value2 == null) 
        { 
         return false; 
        } 
        else 
        { 
         // These 2 columns consist of time format (h:mm);        
         if (j == 6 || j == 7) 
         { 
          row += (xlRange.Cells[i, j].Text); 
         } 
         else 
         { 
          row += (string)xlRange.Cells[i, j].Value2.ToString(); 
         } 

         // Don't want to append , to the last item 
         if (j < colCount) 
         { 
          row += ','; 
         } 
        } 
       } 
       // if the record (row) is not valid, just return false 
       if (!ValidateRecord(row)) 
       { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 

これは、これらの線に沿って何かがあなたのループ内で動作するはず

private bool ValidateRecord(string record) 
{ 
    List<string> row; 
    switch (_fileType) 
    { 
     case ((int)extensionTypes.CSV): 
      row = record.Split(',').ToList<string>(); 
      if (row.Count != 9) 
      { 
       return false; 
      } 
      break; 
     case ((int)extensionTypes.XLSX): 
      row = record.Split(',').ToList<string>(); 
      if (row.Count != 9) 
      { 
       return false; 
      } 
      break; 
     default: 
      return false; 

    } 
    return IsValidRow(row); 
} 

答えて

2

個々の行を検証し、CSV

private bool FileValidatorCsv() 
    { 
     string currentLine; 
     using (StreamReader sr = new StreamReader(_filename)) 
     { 
      currentLine = sr.ReadLine(); 
      while ((currentLine = sr.ReadLine()) != null) 
      { 
       if (!ValidateRecord(currentLine)) 
       { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 

ヘルパーメソッドを検証します。

xlWorksheet.Cells[RowIndex: i, ColumnIndex: 7].Value = "My error message"; 
+1

私は上記を試みましたが、私はExcelで行われた変更は見ませんでした。また、私はReadOnlyを削除しなければなりませんでした:本当に – ygongdev

+0

mmmの周りを遊んだ後、私はついにそれが動作するようになったと思います。私は問題がExcelのプロセス内で正しく閉鎖されていないと思う。ありがとう! – ygongdev

関連する問題