Esempio n. 1
0
        static void Main(string[] args)
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
            if (CultureInfo.InstalledUICulture.TwoLetterISOLanguageName == "ja")
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja");
            }

            //Definition of application command arguments
            var app = new CommandLineApplication(throwOnUnexpectedArg: false);

            app.Name        = "OfficeExtractText.exe";
            app.Description = Resource.APP_DESCRIPTION;
            var targetPathArgument = app.Argument("<target file or directory>", Resource.TARGET_PATH_ARGUMENT);
            var outputOption       = app.Option("-o|--output", Resource.OUTPUT_OPTION, CommandOptionType.SingleValue);
            var subDirOption       = app.Option("-s|--subdir", Resource.SUBDIR_OPTION, CommandOptionType.NoValue);
            var excelOption        = app.Option("-e|--excel", Resource.EXCEL_OPTION, CommandOptionType.NoValue);
            var wordOption         = app.Option("-w|--word", Resource.WORD_OPTION, CommandOptionType.NoValue);
            var powerPointOption   = app.Option("-p|--powerpoint", Resource.POWERPOINT_OPTION, CommandOptionType.NoValue);
            var nologOption        = app.Option("--no-log", Resource.NOLOG_OPTION, CommandOptionType.NoValue);

            app.OnExecute(() =>
            {
                //Options setting.
                if (targetPathArgument.Value == null || !outputOption.HasValue())
                {
                    app.ShowHelp();
                    return(3);
                }
                //Init logger.
                ConsoleLogger.InitLogger(!nologOption.HasValue(), !nologOption.HasValue(), true);

                //Init options.
                var extractExcel      = excelOption.HasValue();
                var extractWord       = wordOption.HasValue();
                var extractPowerPoint = powerPointOption.HasValue();
                if (!extractExcel && !extractWord && !extractPowerPoint)
                {
                    extractExcel      = true;
                    extractWord       = true;
                    extractPowerPoint = true;
                }
                var options               = new OfficeTextExporterOption();
                options.ExtractExcel      = extractExcel;
                options.ExtractWord       = extractWord;
                options.ExtractPowerPoint = extractPowerPoint;
                options.ExtractSubDir     = subDirOption.HasValue();
                options.OutputDir         = Path.GetFullPath(outputOption.Value());
                try
                {
                    //Execute exporter.
                    var targetPath = Path.GetFullPath(targetPathArgument.Value);
                    ConsoleLogger.WriteLog(String.Format(Resource.EXTRACTING_STARTED_PATH_ARG0, targetPath));
                    var exporter = new OfficeTextExporter(targetPath, options);
                    exporter.Execute();
                    if (exporter.HasWarning())
                    {
                        ConsoleLogger.WriteLog(Resource.EXTRACTING_FINISHED_WITH_WARNING);
                        return(2);
                    }
                    else
                    {
                        ConsoleLogger.WriteLog(Resource.EXTRACTING_FINISHED_SUCCESSFULLY);
                        return(0);
                    }
                }
                catch (ApplicationException e)
                {
                    ConsoleLogger.WriteError(String.Format(Resource.EXTRACTING_FINISHED_WITH_ERROR_DETAILS_ARG0, e.Message));
                    return(1);
                }
                catch (Exception e)
                {
                    ConsoleLogger.WriteError(String.Format(Resource.EXTRACTING_FINISHED_WITH_ERROR_DETAILS_ARG0, e.ToString()));
                    return(1);
                }
            });

            try
            {
                app.Execute(args);
            }
            catch (CommandParsingException)
            {
                app.ShowHelp();
                Environment.Exit(2);
            }
        }
        internal void Execute()
        {
            //Check target files.
            var files = GetTargetFiles();

            if (files.Count == 0)
            {
                throw new ApplicationException(String.Format(Resource.NO_TARGET_FOUND));
            }
            //Init excel, word, powerpoint.
            using (var excel = new ComWrapper <Excel.Application>(new Excel.Application()
            {
                Visible = false, DisplayAlerts = false
            }))
                using (var books = new ComWrapper <Excel.Workbooks>(excel.ComObject.Workbooks))
                    using (var word = new ComWrapper <Word.Application>(new Word.Application()
                    {
                        Visible = false, DisplayAlerts = Word.WdAlertLevel.wdAlertsNone
                    }))
                        using (var docs = new ComWrapper <Word.Documents>(word.ComObject.Documents))
                            using (var powerPoint = new ComWrapper <PowerPoint.Application>(new PowerPoint.Application()
                            {
                                DisplayAlerts = PowerPoint.PpAlertLevel.ppAlertsNone
                            }))
                                using (var ppts = new ComWrapper <PowerPoint.Presentations>(powerPoint.ComObject.Presentations))
                                {
                                    try
                                    {
                                        foreach (var file in files)
                                        {
                                            try
                                            {
                                                ConsoleLogger.WriteLog(String.Format(Resource.EXTRACTING_TEXT_PATH_ARG0, file));
                                                if (IsExcel(file))
                                                {
                                                    ExportExcel(file, books);
                                                }
                                                else if (IsWord(file))
                                                {
                                                    ExportWord(file, docs);
                                                }
                                                else if (IsPowerPoint(file))
                                                {
                                                    ExportPowerPoint(file, ppts);
                                                }
                                            }
                                            catch (COMException e)
                                            {
                                                ConsoleLogger.WriteWarning(String.Format(Resource.SKIPPED_EXTRACTING_TEXT_PATH_ARG0_DETAILS_ARG1, file, e.ToString()));
                                                this.hasWarning = true;
                                            }
                                        }
                                    }
                                    finally
                                    {
                                        try { books.ComObject.Close(); } catch (Exception e) { ConsoleLogger.WriteError(e.ToString()); }
                                        try { excel.ComObject.Quit(); } catch (Exception e) { ConsoleLogger.WriteError(e.ToString()); }
                                        //No need to close docs, because there is no opened file.(And an error occurrs when closing here.)
                                        try { word.ComObject.Quit(); } catch (Exception e) { ConsoleLogger.WriteError(e.ToString()); }
                                        try { powerPoint.ComObject.Quit(); } catch (Exception e) { ConsoleLogger.WriteError(e.ToString()); }
                                    }
                                }
        }