2016-04-16 23 views
0

私はexcellibraryを使用する言語クラスを持っています。私は3つの列を持つ.xlsファイルを持っています。最初は、キーフレーズがドキュメントで使用されているかどうかを確認するために使用され、私は使用する言語ごとに1つの列を持っています。私は、ドキュメントのすべての行に対してtransactionFieldオブジェクトを作成したいと思います。私はそれをしようとするが、私は新しいオブジェクトを作成するたびに作成されたすべてのオブジェクトは、最後に作成されたオブジェクトの値を取る。私が間違っているところを私に説明してください。どうすればその問題を解決できますか? 間違いはここ新しいオブジェクトを作成するすべてのオブジェクトを更新します

TranslationField tnf = new TranslationField(); 
        tnf.Used = false; 
        tnf.Strings = values; 
        Translations.Add(sKey, tnf); 

    public class Languages 
    { 
    public static bool Setup() 
     { 
     SupportedLanguages.Clear(); 
     SupportedLanguages.Add(csDefaultLang); 

     try 
     { 
      Workbook book = Workbook.Load(sPath); 
      Worksheet sheet = book.Worksheets[0]; 

      KeyStringHelper values = new KeyStringHelper(); 
      TranslationNeedle tnl; 
      List<string> columns = new List<string>(); 
      string sKey = ""; 

      // traverse rows by Index 
      for (int rowIndex = sheet.Cells.FirstRowIndex; rowIndex <= sheet.Cells.LastRowIndex; rowIndex++) 
      { 
       Row row = sheet.Cells.GetRow(rowIndex); 
       row.FirstColIndex = 1; 

       for (int colIndex = row.FirstColIndex; colIndex <= row.LastColIndex; colIndex++) 
       { 
        Cell cell = row.GetCell(colIndex); 

        // the first excel row is assumed to be columns names 
        if (rowIndex == sheet.Cells.FirstRowIndex) 
        { 
         //Columns names correctly formatted 
         columns.Add(char.ToUpper(cell.StringValue[0]) + cell.StringValue.Substring(1).ToUpper()); 
         //Register every language inside the xls 
         SupportedLanguages.Add(char.ToUpper(cell.StringValue[0]) + cell.StringValue.Substring(1).ToUpper()); 
        } 
        else 
        { 
         if (colIndex - row.FirstColIndex == 0) 
          sKey = cell.StringValue.Replace("\r\n", "\n"); 
         else 
          values.Add(columns[colIndex - row.FirstColIndex], cell.StringValue.Replace("\r\n", "\n")); 
        } 
       } 

       // add the cell values to Translations Dictionary 
       if (rowIndex != sheet.Cells.FirstRowIndex) 
       { 
        TranslationField tnf = new TranslationField(); 
        tnf.Used = false; 
        tnf.Strings = values; 
        Translations.Add(sKey, tnf); 
       } 
       } 

      //other stuff 
     } 
     } 

が起こる場所ですあなたがすべてのTranslationFieldに同じKeyStringHelperインスタンス(values)を再利用しているクラスTranslationField

class TranslationField 
{ 
public bool Used = false; 
public KeyStringHelper Strings = new KeyStringHelper(); 
} 
+1

これを[mcve]として再現してください。問題がどこにある可能性が高い 'TranslationField'クラスも表示していないことに注意してください。 –

+0

申し訳ありません、答えを編集します –

+0

あなたが試したことは何ですか?あなたのコードに基づいて、私はどこにコードが間違っているのか分かりません。コードがどこに間違っているのかを教えてください。StackOverflowでは、「この機能要件をどうやって解決するのですか?」と尋ねるよりもはるかに優れています...そして、あなたの質問は、 。 – code4life

答えて

1

です。したがってTranslationsコレクションのTranslationFieldインスタンスはすべて同じKeyStringHelperインスタンスを参照しています。

あなたが外forループ内

KeyStringHelper values = new KeyStringHelper(); 

線を移動する必要があるように見えます。

関連する問題