Ich habe eine Klasse Sprachen, in der ich die Excellibrary verwenden. Ich habe eine .xls-Datei, in der ich drei Spalten habe. Die erste wird verwendet, um zu prüfen, ob die Schlüsselphrase im Dokument verwendet wird, und dann habe ich eine Spalte für jede Sprache, die ich verwende. Ich möchte ein transactionField-Objekt für jede Zeile des Dokuments erstellen. Ich versuche das zu tun, aber jedes Mal, wenn ich ein neues Objekt erstelle, nehmen alle Objekte, die zuvor erstellt wurden, die Werte des zuletzt erstellten Objekts an. Kannst du mir bitte erklären, wo ich falsch liege und wie kann ich dieses Problem korrigieren? Diese ist, wo der Fehler passierenAktualisieren Sie alle Objekte, wo neue erstellen
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
}
}
Hier ist die Klasse TranslationField
class TranslationField
{
public bool Used = false;
public KeyStringHelper Strings = new KeyStringHelper();
}
Bitte reproduzieren Sie dies als [MCVE]. Beachten Sie, dass Sie Ihre "TranslationField" -Klasse nicht angezeigt haben, wo sich das Problem wahrscheinlich befindet. –
Entschuldigung, bearbeiten Sie die Antwort –
Können Sie uns sagen, was Sie bisher versucht haben? Aufgrund Ihres Codes sehe ich nicht, wo der Code falsch läuft. Lassen Sie uns wissen, wo der Code schief läuft, das funktioniert besser in StackOverflow, als zu fragen, "wie löse ich diese funktionale Anforderung?" ... und Ihre Frage klingt für Letzteres viel näher als die erste, fürchte ich . – code4life