Нередко при тестировании и отладке решений для SharePoint нужно загрузить n-ое количество тестовых файлов в библиотеку документов.
Хорошо если наши запросы скромные, и для тестирования достаточно скопировать несколько файлов через "режим проводника" из локальной папки.
Но как быть если таких файлов нужно загрузить не одну тысячу в несколько библиотек?
Один из вариантов - воспользоваться Open XML SDK 2.0 for Microsoft Office.
Пример содержимого в сгенерированных файлах MS Office приведен на рисунках ниже.
Хорошо если наши запросы скромные, и для тестирования достаточно скопировать несколько файлов через "режим проводника" из локальной папки.
Но как быть если таких файлов нужно загрузить не одну тысячу в несколько библиотек?
Один из вариантов - воспользоваться Open XML SDK 2.0 for Microsoft Office.
Пример разработки приложения для генерации произвольных файлов формата MS Word и Excel в SharePoint
В своей предыдущей статье я уже описывал как начать работу с Open XML SDK 2.0 for Microsoft Office и создать проект в Visual Studio 2010, поэтому повторяться не буду.
Начнем сразу с главного: как генерировать файлы формата MS Office "на лету".
Начнем сразу с главного: как генерировать файлы формата MS Office "на лету".
Генерация файла формата MS Word 2007/2010
В данном примере я приведу метод, позволяющий генерировать файл MS Word, содержащий одну строку текста, c использованием Open XML SDK 2.0.
Листинг с комментариями приведен ниже.
Листинг с комментариями приведен ниже.
public static void GenerateWordDocument(Stream doc, string documentContentText) { //Создаем Wordprocessing документ using (WordprocessingDocument myDoc = WordprocessingDocument.Create(doc, WordprocessingDocumentType.Document)) { //Добавляем новую главную часть документа - main document part MainDocumentPart mainPart = myDoc.AddMainDocumentPart(); mainPart.Document = new Document(); //Создаем тело документа - Body (этот элемент содержит //другие элементы, которые мы хотим добавить в документ) Body body = new Body(); //Создаем параграф Paragraph paragraph = new Paragraph(); Run run_paragraph = new Run(); //Размещаем текст в документе Text text_paragraph = new Text(documentContentText); run_paragraph.Append(text_paragraph); paragraph.Append(run_paragraph); body.Append(paragraph); mainPart.Document.Append(body); //Сохраняем изменения в главной части документа mainPart.Document.Save(); } }
Генерация файла формата MS Excel 2007/2010
Для генерации различных отчетов в виде файлов MS Excel я часто использую библиотеку EEPlus из проекта EPPlus-Create advanced Excel 2007 spreadsheets on the server.
С помощью этой библиотеки метод, позволяющий сгенерировать Excel файл, содержащий ячейку с текстом, умещается в несколько строк (сравните для примера с описанием генерации c применением "чистого" Open XML SDK 2.0 на msdn).
Листинг с комментариями приведен ниже.
public static void GenerateExcelDocument(Stream doc, string documentContentText) { using (var xls = new ExcelPackage(doc)) { //Добавляем лист в книгу Excel var worksheet = xls.Workbook.Worksheets.Add("Worksheets1"); //Задаем ширину первого столбца worksheet.Column(1).Width = 30; //Указываем содержимое первой ячейки в первом столбце worksheet.Cells[1, 1].Value = documentContentText; //Добавляем метаданные к файлу xls.Workbook.Properties.Title = "Excel2010"; xls.Workbook.Properties.Author = "UploadDocs2Lib"; xls.Save(); } }Если требуется вставить автофильтр в Excel файл, то нужно явно применить его ко всему листу: worksheet.Cells[worksheet.Dimension.Address].AutoFilter=true;
Написание приложения для генерации файлов
Все исходные коды приложения опубликованы на https://github.com/eof151/SPUploadDocs2Lib.
Создадим новое WinForms приложение, я назвал его - SPUploadDocs2Lib.
Создадим новое WinForms приложение, я назвал его - SPUploadDocs2Lib.
Структура итогового проекта изображена на рисунке ниже. Не забываем добавить референсы на библиотеки DocumentFormat.OpenXml и EEPlus.
Рисунок 1.
Два вышеприведенных метода я объединил в файле с одноименным классом DocumentBuilder.cs
Для генерации файлов определенного типа уже непосредственно в определенной библиотеке документов SharePoint я написал общий метод, код которого приведен в листинге ниже.
private void GenerateFile(SPList myList, bool isWord) { SPListItem item = null; string documentName = ""; MemoryStream docStream = new MemoryStream(); StreamWriter writer = new StreamWriter(docStream); if (isWord) //Word { //Генерируем случайное имя файла, используя префикс и соответствующее расширение documentName = GeneratePartFileName(tbFilenamePref.Text, WORDFILE); DocumentBuilder.GenerateWordDocument(docStream, tbWordText.Text); } else //Excel { documentName = GeneratePartFileName(tbExcFilenamePref.Text, EXCELFILE); DocumentBuilder.GenerateExcelDocument(docStream, tbExcelText.Text); } SPFile file = myList.RootFolder.Files.Add(documentName, docStream, true); writer.Flush(); item = file.Item; //Заполняем свойство - Название item["Title"] = "TestFile" + item.ID; item.Update(); }Вид окна программы приведен на рисунке ниже.
Рисунок 2.
Результат работы программы
После запуска в окне программы необходимо указать URL-адрес сайта и название библиотеки документов, в которой планируется сгенерировать файлы. После этого остается указать число создаваемых файлов их префиксы и текст содержимого.
Нажимаем на соответствующие кнопки с иконками MS Word или MS Excel и смотрим на результат:
Рисунок 4. Результат работы программы в SharePoint 2013
Рисунок 5. Содержимое сгенерированного файла MS Word
Рисунок 6. Содержимое сгенерированного файла MS Excel
Подведем итоги
Как вы успели заметить, посредством небольшого количества кода и Open XML SDK 2.0 for Microsoft Office можно просто генерировать множество файлов MS Office в библиотеках документов SharePoint.
Полезные ссылки
- Creating Documents by Using the Open XML Format SDK Version 2.0 CTP (Part 1 of 3)
- Creating Documents by Using the Open XML Format SDK Version 2.0 CTP (Part 2 of 3)
- Creating Documents by Using the Open XML Format SDK Version 2.0 CTP (Part 3 of 3)
- How to: Create a word processing document by providing a file name (Open XML SDK)
- Creation of a Word 2007 document using the Open XML Format SDK
Комментариев нет:
Отправить комментарий