2017-08-28 16 views
0

System.IndexOutOfRangeException:インデックスが配列の境界外にありました。C#でXLSをCSVに保存:インデックスが配列の境界外にありました

このエラーを解決するにはどうすればよいですか?

誰でもこれを知ることができますか?私のコーディング以下

...実行し、それが

System.IndexOutOfRangeException指数は、このcsvファイルを処理しようとした場合にのみ、配列

の境界外だったというエラーが発生したときに:このcsvファイルを処理しようとした場合

enter image description here

は、代わりに私がエラーを持っていない: enter image description here

Excel.IExcelDataReader excelReader = Excel.ExcelReaderFactory.CreateBinaryReader(stream); 
DataSet result = excelReader.AsDataSet(); 
excelReader.Close(); 
result.Tables[0].TableName.ToString(); 
string csvData = ""; 
int row_no = 0; 
int ind = 0; 

while (row_no < result.Tables[ind].Rows.Count) 
{ 
    for (int i = 0; i < result.Tables[ind].Columns.Count; i++) 
    { 
     csvData += result.Tables[ind].Rows[row_no][i].ToString() + "|"; 
    } 

    row_no++; 
    csvData += "\n"; 
} 

keys = GetUniqueKey(12).ToUpper(); 
output = System.Web.HttpContext.Current.Server.MapPath("/public/" + keys.ToString() + ".csv"); 
StreamWriter csv = new StreamWriter(@output, false); 
csv.Write(csvData); 
csv.Close(); 
csv.Dispose(); 

string toCheck; 
using (var fs = new FileStream(output, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var sr = new StreamReader(fs, Encoding.Default)) 
{ 
    toCheck = sr.ReadToEnd(); 
    if (toCheck.Contains("ColumnAAA") == false) 
    { 
     ////Start add new column 
     int posNewColumn = 2; 
     string[] CSVDump = File.ReadAllLines(output); 
     List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList(); 
     for (int i = 0; i < CSV.Count; i++) 
     { 
      if (CSV[i].Count > posNewColumn) 
      { 
       CSV[i].Insert(posNewColumn, i == 0 ? "ColumnAAA" : "ColumnAAA"); 
      } 
      else 
      { 
       CSV[i].Add(i == 0 ? "ColumnAAA" : "ColumnAAA"); 
      } 
     } 
     File.WriteAllLines(output, CSV.Select(x => string.Join("|", x))); 
     sr.Close(); 
     ////End add new column 
    } 
} 

編集#01

問題は、コードビハインドのこの行です。

正しくコード印刷行数が、列の数際に試し印刷やスプリット、私はエラーを持っている:

lines = File.ReadAllLines(System.Web.HttpContext.Current.Server.MapPath("/public/" + keys.ToString() + ".csv")); 
rows = lines.Count(); 
columns = lines[23].Split('|').Count(); 

Response.Write("Number of rows/columns = " + rows.ToString() + "/" + columns.ToString()); 
Response.End(); 
+0

は、デバッガを使用しようとしました?このエラーが発生した場合は、コードの行を見つけることをおすすめします。この後、問題を解決する方がはるかに簡単です。 – Ilya

+0

@Ilya返信ありがとうございます。私の最初の質問で**編集#01 **を参照してください - –

答えて

0

これを試してみてください:

lines = File.ReadAllLines(System.Web.HttpContext.Current.Server.MapPath("/public/" + keys.ToString() + ".csv")); 
rows = lines.Count(); 

int i = 0; 
foreach (string line in lines) 
{ 
    string[] parts = line.Split('|'); 
    foreach (string part in parts) 
    { 
     columns = parts.Count(); 
    } 
    i++; 
} 

Response.Write("Number of rows/columns = " + rows.ToString() + "/" + columns.ToString()); 
Response.End(); 
関連する問題