/// <summary> /// 比較用翻訳シートを出力する。 /// (比較用のため、出力項目は、キーと原文のみ) /// </summary> /// <param name="langInfo">言語情報</param> /// <param name="path">CSV形式の翻訳シートのパス</param> /// <param name="from">シート分割の始点</param> /// <param name="to">シート分割の終点</param> /// <param name="useTag">タグ化の有無</param> public static void SaveToCsv( PfkLanguageInfo langInfo, string path, int from, int to, bool useTag) { using (var sw = new StreamWriter(path, false, Encoding.UTF8)) { using (var writer = new CsvWriter(sw, CultureInfo.InvariantCulture)) { writer.Configuration.RegisterClassMap <CsvMapperTransSheetForCompare>(); writer.WriteHeader <PfkTransSheetEntry>(); writer.NextRecord(); int total = 0; foreach (var langFile in langInfo.Items.Values) { foreach (var langEntry in langFile.Items.Values) { if (string.IsNullOrWhiteSpace(langEntry.Text)) { continue; } if (total >= from && total <= to) { // 出力 var data = new PfkTransSheetEntry(); data.English = langEntry.Text; if (useTag) { //// 制御文字をタグ化する。 data.English = PfkTransSheetEntry.GetEscapedText(data.English); } //// TAB文字は無条件にタグ化する。 //// 理由:CSVファイルを表計算ソフトで読み込んだ場合、TAB文字は無視されてしまう場合があるため。 data.English = PfkTransSheetEntry.GetEscapedTab(data.English); data.Key = langEntry.Key; writer.WriteRecord(data); writer.NextRecord(); } total++; } } } } }
public static void SaveToExcel( PfkLanguageInfo langInfo, PfkLanguageInfo funInfo, PfkUmmDataInfo ummDataInfo, string path, int maxRowCount, bool useTag) { using (var workbook = new XLWorkbook()) { IXLWorksheet worksheet = null; bool useFunTrans = false; if (funInfo.Items.Count > 0) { useFunTrans = true; } if (maxRowCount == 0) { maxRowCount = 9999999; } int sheetNo = 1; foreach (var langFile in langInfo.Items.Values) { int sequenceNo = 1; int rowNo = maxRowCount + 2; foreach (var langEntry in langFile.Items.Values) { if (string.IsNullOrWhiteSpace(langEntry.Text)) { continue; } if (rowNo > maxRowCount + 1) { worksheet = workbook.Worksheets.Add($"Sheet{sheetNo}"); sheetNo++; //// ヘッダー出力 WriteExcelHeader(worksheet); rowNo = 2; } // 出力 var data = new PfkTransSheetEntry(); data.Key = langEntry.Key; data.English = langEntry.Text; //// 有志翻訳版が指定された場合は、有志翻訳のデータを反映する。 if (useFunTrans) { var funEntry = funInfo.GetEntry(langEntry.Key); if (JapaneseStringUtils.TJapaneseStringUtils.ContainsJapanese(funEntry.Text)) { data.Japanese = funEntry.Text; } } if (useTag) { //// 制御文字をタグ化する。 data.English = PfkTransSheetEntry.GetEscapedText(data.English); data.Japanese = PfkTransSheetEntry.GetEscapedText(data.Japanese); } //// TAB文字は無条件にタグ化する。 //// 理由:CSVファイルを表計算ソフトで読み込んだ場合、TAB文字は無視されてしまう場合があるため。 data.English = PfkTransSheetEntry.GetEscapedTab(data.English); data.Japanese = PfkTransSheetEntry.GetEscapedTab(data.Japanese); //// UMMデータの取得 var ummDataEntry = ummDataInfo.GetEntry(data.Key); if (ummDataEntry == null) { data.MachineTranslation = string.Empty; } else { //// UMMデータがある場合は機械翻訳として取り込む。 data.MachineTranslation = PfkTransSheetEntry.GetEscapedTab(ummDataEntry.Value); } //// リファレンスIDを算出する。 data.ReferenceID = PfkHashTools.ComputeHashX(langEntry.Key.ToString()); data.Sequence = sequenceNo; //// 各カラムの属性を設定する。 int dummyInt = 0; if (int.TryParse(data.English, out dummyInt)) { //// 符号付き数値を適切の扱うための対処。 //// シングルコーテーションを付けた文字列形式で格納する。 worksheet.Cell(rowNo, 2).Style.NumberFormat.Format = "@"; worksheet.Cell(rowNo, 2).Style.IncludeQuotePrefix = true; worksheet.Cell(rowNo, 3).Style.NumberFormat.Format = "@"; worksheet.Cell(rowNo, 3).Style.IncludeQuotePrefix = true; } else if ( data.English.StartsWith("-") || data.English.StartsWith("+") || data.English.StartsWith("=")) { //// 計算式と誤認されないようにするための対処。 //// シングルコーテーションを付けた標準形式で格納する。 //// (注:文字列形式では255文字以上のデータがエラーとなるため不可) worksheet.Cell(rowNo, 2).Style.IncludeQuotePrefix = true; worksheet.Cell(rowNo, 3).Style.IncludeQuotePrefix = true; } else { //// 上記以外のデータは標準形式とする。 } //// データを転機する。 worksheet.Cell(rowNo, 1).Value = data.Key; worksheet.Cell(rowNo, 2).Value = data.English; worksheet.Cell(rowNo, 3).Value = data.Japanese; worksheet.Cell(rowNo, 4).Value = data.MachineTranslation; worksheet.Cell(rowNo, 5).Style.NumberFormat.Format = "@"; worksheet.Cell(rowNo, 5).Style.IncludeQuotePrefix = true; worksheet.Cell(rowNo, 5).Value = data.ReferenceID; worksheet.Cell(rowNo, 6).Value = data.Sequence; rowNo++; sequenceNo++; } } workbook.SaveAs(path); } }