static bool SeedToExcel(ToOptions opts) { if (opts.config != null && opts.config.Length > 0) { opts = BasicOptions.Load(opts.config).ToOptions( files: opts.files, seedInput: opts.seedInput, xlsxInput: opts.xlsxInput, output: opts.output ); } return(SeedTableInterface.SeedToExcel(opts)); }
public static bool SeedToExcel(ToOptions options) { Log("engine", options.engine); Log("output-directory", options.output); var startTime = DateTime.Now; var previousTime = startTime; foreach (var file in options.files) { var filePath = Path.Combine(options.xlsxInput, file); Log(file); Log(" full-path", filePath); CheckFileExists(filePath); switch (options.engine) { case ToOptions.Engine.OpenXml: using (var excelData = OpenXml.ExcelData.FromFile(filePath, true)) { var parseFinishTime = DateTime.Now; DurationLog(" parse-time", previousTime, parseFinishTime); previousTime = SeedToExcelCore(excelData, file, options, startTime, parseFinishTime); } break; case ToOptions.Engine.ClosedXML: using (var excelData = ClosedXML.ExcelData.FromFile(filePath)) { var parseFinishTime = DateTime.Now; DurationLog(" parse-time", previousTime, parseFinishTime); previousTime = SeedToExcelCore(excelData, file, options, startTime, parseFinishTime); } break; case ToOptions.Engine.EPPlus: using (var excelData = EPPlus.ExcelData.FromFile(filePath)) { var parseFinishTime = DateTime.Now; DurationLog(" parse-time", previousTime, parseFinishTime); previousTime = SeedToExcelCore(excelData, file, options, startTime, parseFinishTime); } break; } } DurationLog("total", startTime, DateTime.Now); return(true); }
static DateTime SeedToExcelCore(IExcelData excelData, string file, ToOptions options, DateTime startTime, DateTime previousTime) { Log(" sheets"); var fileName = Path.GetFileName(file); var sheetsConfig = new SheetsConfig(options.only, options.ignore, null, null, options.mapping, options.alias); var yamlDataCache = new Dictionary <string, YamlData>(); // aliasのため同テーブルはキャッシュする foreach (var sheetName in excelData.SheetNames) { var yamlTableName = sheetsConfig.YamlTableName(fileName, sheetName); if (yamlTableName == sheetName) { Log($" {yamlTableName}"); } else { Log($" {yamlTableName} -> {sheetName}"); } if (!sheetsConfig.IsUseSheet(fileName, sheetName, yamlTableName, OnOperation.To)) { Log(" ignore", "skip"); continue; } var subdivide = sheetsConfig.subdivide(fileName, yamlTableName, OnOperation.To); var seedTable = GetSeedTable(excelData, sheetName, options, subdivide); if (seedTable.Errors.Count != 0) { continue; } YamlData yamlData = null; if (!yamlDataCache.TryGetValue(yamlTableName, out yamlData)) { try { yamlData = YamlData.ReadFrom(yamlTableName, options.seedInput, options.seedExtension, subdivide.KeyColumnName); yamlDataCache[yamlTableName] = yamlData; } catch (FileNotFoundException exception) { Log(" skip", $"seed file [{exception.FileName}] not found"); continue; } } try { seedTable.DataToExcel(yamlData.Data, options.delete); } catch (IdParseException exception) { WriteInfo($" ERROR: {exception.Message}"); throw new CannotContinueException(); } var now = DateTime.Now; DurationLog(" write-time", previousTime, now); previousTime = now; } // 数式を再計算して結果をキャッシュする if (options.calcFormulas && excelData is EPPlus.ExcelData) { ((EPPlus.ExcelData)excelData).Calculate(); } if (options.output.Length == 0) { excelData.Save(); Log(" write-path", "overwrite"); } else { var writePath = Path.Combine(options.output, file); Log(" write-path", writePath); if (!Directory.Exists(options.output)) { Directory.CreateDirectory(options.output); } excelData.SaveAs(writePath); } var end = DateTime.Now; DurationLog(" write-time", previousTime, end); return(end); }