Нередко при тестировании и отладке решений для 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






Комментариев нет:
Отправить комментарий