Преобразование файлов doc в файлы docx в C#

В этом примере показано, как написать программу на C# для автоматического преобразования файлов doc в файлы docx.

В предыдущей версии Windows, когда я дважды щелкнул файл .doc, я получил это сообщение об ошибке:

Ошибка

В настоящее время операционная система не настроена для запуска этого приложения.

Это исправлено в последних версиях Windows, но каждый раз, когда это происходило, я задавался вопросом, почему Microsoft решила, что Word не понимает файлы .doc по умолчанию. Возможно, это было «побудить» людей переходить к файлам .docx.

Более новый формат .docx предлагает больше возможностей (хотя я не уверен, что это такое), поэтому имеет смысл конвертировать файлы doc в файлы docx.

Эта программа преобразует все файлы .doc в каталог в файлы .docx. Программа включает ссылку на Microsoft.Office.Interop.Word 12.0.0.0, чтобы разрешить ей манипулировать файлами Microsoft Word. Чтобы добавить такую ссылку, откройте меню «Проект» и выберите «Добавить ссылку». На вкладке .NET выберите самую последнюю версию записи Microsoft.Office.Interop.Word и нажмите «ОК».

Чтобы упростить использование классов, определенных в этой библиотеке, программа включает в себя следующую инструкцию using:

using Word = Microsoft.Office.Interop.Word;

Это позволяет программе использовать префикс Word для указания классов в библиотеке.

Если вы вводите или выбираете путь к каталогу и нажимаете кнопку «Преобразовать», выполняется следующий код.

private void btnConvert_Click(object sender, EventArgs e)
{
        Word._Application word_app = new Word.ApplicationClass();

        object missing = System.Reflection.Missing.Value;
    object save_changes = false;
    
        int num_converted = 0;
    lstFiles.Items.Clear();
    DirectoryInfo dir_info = new DirectoryInfo(txtDirectory.Text);
    foreach (FileInfo file_info in dir_info.GetFiles("*.doc"))
    {
                if (file_info.Extension.ToLower() == ".docx") continue;

                int name_length =
            file_info.FullName.Length - file_info.Extension.Length;
        string new_filename =
            file_info.FullName.Substring(0, name_length) + ".docx";

                if (File.Exists(new_filename))
        {
            lstFiles.Items.Add("Skipped " + file_info.Name);
        }
        else
        {
            lstFiles.Items.Add("Converted " + file_info.Name);
            num_converted++;

                        object filename = file_info.FullName;
            object confirm_conversions = false;
            object read_only = true;
            object add_to_recent_files = false;
            object format = 0;
            Word._Document word_doc =
                word_app.Documents.Open(ref filename,
                    ref confirm_conversions, ref read_only,
                    ref add_to_recent_files, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref format, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing);

                        filename = new_filename;
            object file_format =
                Word.WdSaveFormat.wdFormatDocumentDefault;
            word_doc.SaveAs(ref filename, ref file_format,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing);

                        word_doc.Close(ref save_changes, ref missing,
                ref missing);
        }
    }

        word_app.Quit(ref save_changes, ref missing, ref missing);

    int num_skipped = lstFiles.Items.Count - num_converted;
    MessageBox.Show("Converted " + num_converted.ToString() +
        " files.\n" +
        "Skipped " + num_skipped.ToString() + " files.",
        "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

Этот код создает объект приложения Word для работы с Word. Затем он определяет пару переменных, которые он может передать методам Word. Эти методы принимают почти каждый параметр по ссылке (с ключевым словом ref), поэтому значения должны храниться в переменных, которые затем можно передать по ссылке. Переменные должны иметь правильные типы (object), или ссылки не будут работать.

Вероятно, самым важным и запутанным значением является System.Reflection.Missing.Value. Если вы хотите опустить параметр в один из методов Word, вы не можете просто передать null в этот метод. Вместо этого вы должны передать это специальное значение по ссылке.

Создав два значения, код создает объект DirectoryInfo, представляющий каталог, который вы ввели в текстовое поле, и использует его метод GetFiles для перечисления файлов, соответствующих шаблону *. doc в каталоге.

Если расширение файла .docx, программа использует оператор continue, чтобы пропустить файл и продолжить цикл.

Затем код вычисляет имя файла с расширением, установленным в .docx. Если этот файл уже существует, программа добавляет оператор, говорящий, что он пропустил файл в форме ListBox формы. Если файл .docx не существует, программа добавляет сообщение о том, что оно преобразует файл, а затем начинает выполнять настоящую работу.

Затем код вычисляет имя файла с расширением, установленным в .docx. Если этот файл уже существует, программа добавляет оператор, говорящий, что он пропустил файл в форме ListBox формы. Если файл .docx не существует, программа добавляет сообщение о том, что оно преобразует файл, а затем начинает выполнять настоящую работу.

...

После обработки всех файлов программа закрывает сервер приложений Word и отображает сообщение, сообщающее, сколько файлов было преобразовано и пропущено.

Источник: http://csharphelper.com/blog/2016/11/convert-doc-files-into-docx-files-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector