#c# #asp.net #ms-word #office-interop
#c# #asp.net #ms-word #office-interop
Вопрос:
Я использую элемент управления загрузчиком файлов, и мне нужно преобразовать загруженный .docx
файл в .txt
файл, я использовал часть кода, как показано ниже:
object missingType = Type.Missing;
object readOnly = true;
object isVisible = false;
object format = WdSaveFormat.wdFormatText;
string randomName = DateTime.Now.Ticks.ToString();
FileUpload1.SaveAs(Server.MapPath("~/TextDoc/") Path.GetFileName(FileUpload1.PostedFile.FileName));
object fileName = FileUpload1.PostedFile.FileName;
object txtFilePath = Server.MapPath("~/TextDoc/") randomName ".txt";
//Open the word document in background
ApplicationClass applicationclass = new ApplicationClass();
applicationclass.Documents.Open(ref fileName,
ref readOnly,
ref missingType, ref missingType, ref missingType,
ref missingType, ref missingType, ref missingType,
ref missingType, ref missingType, ref isVisible,
ref missingType, ref missingType, ref missingType,
ref missingType, ref missingType);
applicationclass.Visible = false;
Document document = applicationclass.ActiveDocument;
//Save the word document as txt file
document.SaveAs(ref txtFilePath, ref format, ref missingType,
ref missingType, ref missingType, ref missingType,
ref missingType, ref missingType, ref missingType,
ref missingType, ref missingType, ref missingType,
ref missingType, ref missingType, ref missingType,
ref missingType);
//Close the word document
document.Close(ref missingType, ref missingType, ref missingType);
И я изменил переменную ‘filename’ на
object fileName = "~/" Path.GetFullPath(FileUpload1.FileName);
затем я получаю исключение, подобное:
This command is not available because no document is open.
Пожалуйста, кто-нибудь мне поможет..
Комментарии:
1. Microsoft не поддерживает автоматизацию office в ASP.Net : support.microsoft.com/kb/257757
2. У меня нет полного решения вашей проблемы. Однако я читал, что документы Office теперь представляют собой, по сути, просто архивированный XML-документ. См . en.wikipedia.org/wiki/Office_Open_XML для получения дополнительной информации.
Ответ №1:
Вы можете использовать DocX для чтения / обработки документов Word без каких-либо зависимостей от Office или Interop.
Найдите DocX здесь
Владелец проекта, Катал Коффи, публикует здесь различные темы DocX
Я сделал быструю и грязную статью типа «начало работы» об использовании DocX ЗДЕСЬ
Должно быть относительно просто использовать DocX для извлечения текста нашего документа Word, а затем сохранить как обычный файл .txt.
Обычно я не просто размещаю ссылки в ответе SO. Однако в этом случае, поскольку я просто указываю вам на альтернативный инструмент для выполнения работы, он кажется подходящим.
Ответ №2:
Я получил эти ошибки из-за передачи физического пути к «Открытому методу».
Наконец, я выбрал другую папку в решении для хранения загруженных документов Word, и я передал этот путь к файлу в «метод открытия».Я отредактировал код, как показано ниже:
FileUpload1.SaveAs(Server.MapPath("~/WordDoc/") Path.GetFileName(FileUpload1.PostedFile.FileName));
object fileName = Server.MapPath("~/WordDoc/" Path.GetFileName(FileUpload1.PostedFile.FileName));
И я сохранил преобразованные файлы .txt в другой папке, как и раньше (код находится под вопросом).
И после преобразования я удалил документ Word (который загружен или сохранен в папке «wordDoc»), например:
File.Delete(Server.MapPath("~/WordDoc/") Path.GetFileName(FileUpload1.PostedFile.FileName));
Ответ №3:
Пожалуйста, попробуйте заменить второй аргумент (формат ссылки) в документе.Метод SaveAs со строкой ниже:
Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatUnicodeText
Это сохранит ваш документ Word в виде файла txt.