/// <summary> /// This is our primary entry point for importing from a spreadsheet. There is also a CLI command, /// but we shouldn't need that one much, now that we have this on our book thumb context menus. /// </summary> public void HandleImportContentFromSpreadsheet(Book.Book book) { if (!_collectionModel.CollectionSettings.HaveEnterpriseFeatures) { Enterprise.ShowRequiresEnterpriseNotice(Form.ActiveForm, "Import to Spreadsheet"); return; } var bookPath = book.GetPathHtmlFile(); try { string inputFilepath; using (var dlg = new DialogAdapters.OpenFileDialogAdapter()) { dlg.Filter = "xlsx|*.xlsx"; dlg.RestoreDirectory = true; dlg.InitialDirectory = GetSpreadsheetFolderFor(book, false); if (DialogResult.Cancel == dlg.ShowDialog()) { return; } inputFilepath = dlg.FileName; var spreadsheetFolder = Path.GetDirectoryName(inputFilepath); SetSpreadsheetFolder(book, spreadsheetFolder); } var importer = new SpreadsheetImporter(_webSocketServer, book, Path.GetDirectoryName(inputFilepath)); importer.ImportWithProgress(inputFilepath); // The importer now does BringBookUpToDate() which accomplishes everything this did, // plus it may have actually changed the folder (and subsequent 'bookPath') // due to a newly imported title. That would cause this call to fail. //XmlHtmlConverter.SaveDOMAsHtml5(book.OurHtmlDom.RawDom, bookPath); book.ReloadFromDisk(null); BookHistory.AddEvent(book, TeamCollection.BookHistoryEventType.ImportSpreadsheet); _bookSelection.InvokeSelectionChanged(false); } catch (Exception ex) { var msg = LocalizationManager.GetString("Spreadsheet:ImportFailed", "Import failed: "); NonFatalProblem.Report(ModalIf.All, PassiveIf.None, msg + ex.Message, exception: ex, showSendReport: false); } }