Пошаговое руководство. Получение кэшированных данных из книги на сервере
В этом пошаговом руководстве описано, как извлечь данные из набора данных, кэшированного в рабочей книге Microsoft Office Excel, не запуская Excel, с помощью класса ServerDocument.
Применение. Сведения этого раздела применяются к проектам уровня документа для Excel 2013 и Excel 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.
В данном пошаговом руководстве рассмотрены следующие задачи:
Определение набора данных, содержащего данные из базы данных AdventureWorksLT.
Создание экземпляров набора данных в проекте рабочей книги Excel и проекте консольного приложения.
Создание объекта ListObject с привязкой к набору данных в рабочей книге и заполнение объекта ListObject данными при открытии рабочей книги.
Добавление набора данных рабочей книги в кэш данных.
Считывание сведений из кэшированного набора данных в набор данных в консольном приложении, не запуская Excel.
Хотя в этом пошаговом руководстве предполагается, что код выполняется на компьютере разработчика, описанный здесь код можно использовать и на сервере, на котором не установлен Excel.
Примечание |
---|
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях.Эти элементы определяются используемым выпуском Visual Studio и его параметрами.Дополнительные сведения см. в разделе Параметры Visual Studio. |
Обязательные компоненты
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
-
Выпуск Visual Studio 2012, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в разделе [Настройка компьютера для разработки решений Office](bb398242\(v=vs.110\).md).
Excel 2013 или Excel 2010.
Доступ к выполняющемуся экземпляру Microsoft SQL Server 2005 или Microsoft SQL Server 2005 Express с подключенным примером базы данных AdventureWorksLT.Базу данных AdventureWorksLT можно загрузить с веб-узла CodePlex.Дополнительные сведения о прикреплении базы данных см. в следующих разделах.
Подробнее о прикреплении базы данных с помощью SQL Server Management Studio или SQL Server Management Studio Express см. Практическое руководство. Прикрепление базы данных (SQL Server Management Studio).
Подробнее о прикреплении базы данных с помощью командной строки см. Практическое руководство. Прикрепление файла базы данных к SQL Server Express.
Создание проекта библиотеки классов, определяющего набор данных
Для использования того же набора данных в проекте книги Excel и в консольном приложении необходимо определить набор данных в отдельной сборке, на которую ссылаются оба проекта.Для этого пошагового руководства определите набор данных в проекте библиотеки классов.
Чтобы создать проект библиотеки классов
Запустите Visual Studio.
В меню Файл последовательно выберите пункты Создать и Проект.
В области шаблонов разверните узел Visual C# или Visual Basic, а затем щелкните Windows.
В списке шаблонов проектов выберите Библиотека классов.
В поле Имя введите AdventureWorksDataSet.
Нажмите Обзор, перейдите в папку %UserProfile%\Мои документы (для Windows XP и более ранних версий) или %UserProfile%\Документы (для Windows Vista) и нажмите Выбрать папку.
В диалоговом окне Новый проект снимите флажок Создать папку для решения.
Нажмите кнопку ОК.
Visual Studio добавит проект AdventureWorksDataSet в Обозреватель решений и откроет файл кода Class1.cs или Class1.vb.
В обозревателе решений щелкните правой кнопкой мыши Class1.cs или Class1.vb и выберите команду Удалить.В данном пошаговом руководстве этот файл не нужен.
Определение набора данных в проекте библиотеки классов
Определите типизированный набор данных, содержащий данные из базы данных AdventureWorksLT для SQL Server 2005.Далее в этом пошаговом руководстве ссылка на этот набор данных будет помещена в проект книги Excel и в проект консольного приложения.
Набор данных — типизированный набор данных, представляющий данные в таблице Product базы данных AdventureWorksLT.Дополнительные сведения о типизированных наборах данных см. в разделе Работа с наборами данных в Visual Studio.
Определение типизированного набора данных в проекте библиотеки классов
В обозревателе решений щелкните проект AdventureWorksDataSet.
Если окно Источники данных не отображается, его отображение в строке меню, выбирая Вид, Другие окна, Источники данных.
Выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
Щелкните База данных и нажмите кнопку Далее.
Если подключение к базе данных AdventureWorksLT существует, выберите его и нажмите кнопку Далее.
В противном случае нажмите кнопку Новое подключение и с помощью диалогового окна Добавить подключение создайте новое подключение.Дополнительные сведения см. в разделе Практическое руководство. Подключение к данным в базе данных.
На странице Save the Connection String to the Application Configuration File нажмите кнопку Next.
На странице Выбор объектов базы данных разверните Таблицы и выберите Product (SalesLT).
Нажмите кнопку Готово.
Файл AdventureWorksLTDataSet.xsd добавлен к проекту AdventureWorksDataSet.Этот файл определяет следующие элементы:
Типизированный набор данных с именем AdventureWorksLTDataSet.Этот набор данных представляет содержимое таблицы Product в базе данных AdventureWorksLT.
Адаптер таблиц TableAdapter с именем ProductTableAdapter.Этот адаптер TableAdapter может использоваться для чтения и записи данных в AdventureWorksLTDataSet.Дополнительные сведения см. в разделе Общие сведения об адаптере таблиц.
Далее в пошаговом руководстве используются оба эти объекта.
В обозревателе решений щелкните правой кнопкой мыши AdventureWorksDataSet, а затем щелкните Построить.
Убедитесь, что проект строится без ошибок.
Создание проекта книги Excel
Создайте проект рабочей книги Excel для интерфейса данных.Далее создается объект ListObject, отображающий данные, и добавляется экземпляр набора данных в кэш рабочей книги.
Создание проекта книги Excel
В обозревателе решений щелкните правой кнопкой мыши решение AdventureWorksDataSet, выберите Добавить и затем щелкните Новый проект.
В области шаблонов разверните узел Visual C# или Visual Basic, а затем - Office/SharePoint.
В развернутым узлом Office/SharePoint выберите узел Надстройки office.
В списке шаблонов проектов выберите Книга Excel 2010 или Книга Excel 2013 проекта.
В поле Имя введите AdventureWorksReport.Не изменяйте расположение.
Нажмите кнопку ОК.
Откроется вкладка Мастер проектов Visual Studio Tools for Office.
Убедитесь, что выбрано Создать новый документ, и нажмите кнопку OK.
Visual Studio откроет созданную книгу AdventureWorksReport в конструкторе и добавит проект AdventureWorksReport в обозреватель решений.
Добавление базы данных к источнику данных в проекте книги Excel
Перед тем, как можно будет отобразить набор данных в книге Excel, необходимо добавить набор данных к источникам данных проекта книги Excel.
Добавление набора данных к источникам данных в проекте книги Excel
В обозревателе решений дважды щелкните Sheet1.cs или Sheet1.vb в проекте AdventureWorksReport.
Книга откроется в конструкторе.
В меню Данные выберите команду Добавить новый источник данных.
Появится мастер настройки источника данных.
Выберите Объект и нажмите кнопку Далее.
На странице Выбор объекта для привязки нажмите кнопку Добавить ссылку.
На вкладке Проекты выберите AdventureWorksDataSet, после чего нажмите кнопку ОК.
В пространстве имен AdventureWorksDataSet сборки AdventureWorksDataSet выберите AdventureWorksLTDataSet и нажмите кнопку Готово.
Откроется окно Источники данных и AdventureWorksLTDataSet будет добавлен к списку источников данных.
Создание элемента ListObject, привязанного к экземпляру базы данных
Для отображения набора данных в книге создайте ListObject с привязкой к экземпляру набора данных.Дополнительные сведения о привязке элементов управления к данным см. в разделе Привязка данных к элементам управления в решениях Office.
Создание элемента ListObject, привязанного к экземпляру базы данных
В окне Источники данных разверните узел AdventureWorksLTDataSet источника данных AdventureWorksDataSet.
Выберите узел Product, щелкните направленную вниз стрелку и выберите в раскрывающемся списке ListObject.
Если раскрывающийся список не появляется, убедитесь, что рабочая книга открыта в конструкторе.
Перетащите таблицу Product на ячейку A1.
Элемент управления ListObject с именем productListObject создается на листе с началом в ячейке A1.Одновременно в проект добавляется объект набора данных adventureWorksLTDataSet и BindingSource с именем productBindingSource.ListObject привязан к BindingSource, который, в свою очередь, связан с экземпляром набора данных.
Добавление набора данных к кэшу данных
Чтобы обеспечить коду вне книги Excel возможность получить доступ к набору данных в книге, необходимо добавить набор данных в кэш.Дополнительные сведения о кэше данных см. в разделах Кэшированные данные в настройках уровня документа и Кэширование данных.
Добавление набора данных в кэш
В конструкторе выберите adventureWorksLTDataSet.
В окне Свойства измените значение свойства Modifiers на Public.
Измените значение свойства CacheInDocument на True.
Инициализация набора данных в рабочей книге
Перед получением данных из кэшированного набора данных с помощью консольного приложения его необходимо заполнить данными.
Инициализация набора данных в рабочей книге
В обозревателе решений щелкните правой кнопкой мыши файл Sheet1.cs или Sheet1.vb и выберите Просмотреть код.
Замените обработчик событий Sheet1_Startup следующим кодом.Этот код использует экземпляр класса ProductTableAdapter, определенного в проекте AdventureWorksDataSet, для заполнения кэшированного набора данных данными, если он пуст.
Private ProductTableAdapter As New _ AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter() Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup If Me.NeedsFill("AdventureWorksLTDataSet") Then Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product) End If End Sub
private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter = new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter(); private void Sheet1_Startup(object sender, System.EventArgs e) { if (this.NeedsFill("adventureWorksLTDataSet")) { this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product); } }
Контрольная точка
Постройте и выполните проект книги Excel, чтобы убедиться, что он компилируется и выполняется без ошибок.Эта операция также заполняет набор данных и сохраняет его в книге.
Построение и запуск проекта
В обозревателе решений щелкните правой кнопкой мыши проект AdventureWorksReport, выберите Отладка и нажмите кнопку Запустить новый экземпляр.
Выполняется построение проекта, а рабочая книга открывается в Excel.Проверьте следующее:
ListObject заполняется данными.
Значение в столбце ListPrice для первой строки ListObject равно 1431,5.Далее в этом пошаговом руководстве будет использовано приложение консоли для изменения значений в столбце ListPrice.
Сохраните книгу.Не изменяйте имя файла или расположение книги.
Закройте Excel.
Создание проекта консольного приложения
Создайте проект консольного приложения для изменения данных в кэшированном наборе данных в книге.
Создание проекта консольного приложения
В обозревателе решений щелкните правой кнопкой мыши решение AdventureWorksDataSet, выберите Добавить и затем щелкните Новый проект.
В панели Типы проектов разверните узел Visual C# или Visual Basic, а затем щелкните Windows.
Выберите область Консольное приложение в области Шаблоны.
В поле Имя введите DataReader.Не изменяйте расположение.
Нажмите кнопку ОК.
Visual Studio добавит проект DataReader в обозреватель решений и откроет файл кода Program.cs или Module1.vb.
Извлечение данных из кэшированного набора данных с помощью консольного приложения
Класс ServerDocument в консольном приложении используется для чтения данных в локальный объект AdventureWorksLTDataSet.Чтобы подтвердить, что локальный набор данных инициализирован с помощью кэшированного набора данных, приложение отображает число строк в локальном наборе данных.
Извлечение данных из кэшированного набора данных
В обозревателе решений щелкните правой кнопкой мыши проект DataReader и выберите команду Добавить ссылку.
На вкладке .NET, выберите Microsoft.VisualStudio.Tools.Applications.ServerDocument.
Нажмите кнопку ОК.
В обозревателе решений щелкните правой кнопкой мыши проект DataReader и выберите команду Добавить ссылку.
На вкладке Проекты выберите AdventureWorksDataSet, после чего нажмите кнопку ОК.
Откройте файл Program.cs или Module1.vb в редакторе кода.
Добавьте операторы using (для Visual C#) или Imports (для Visual Basic) в начало файла кода.
Imports Microsoft.VisualStudio.Tools.Applications
using Microsoft.VisualStudio.Tools.Applications;
Добавьте следующий код в метод Main.В этом коде объявляются следующие объекты:
Экземпляр типа AdventureWorksLTDataSet, определенный в проекте AdventureWorksDataSet.
Путь к книге AdventureWorksReport в папке построения проекта AdventureWorksReport.
Объект ServerDocument, используемый для доступа к кэшу данных в книге.
Примечание Следующий код предполагает, что книга сохраняется с расширением имени файла XLSX.Если книга в проекте имеет иное расширение имени файла, измените путь соответственно.
Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet() Dim workbookPath As String = System.Environment.GetFolderPath( _ Environment.SpecialFolder.MyDocuments) & _ "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx" Dim serverDocument1 As ServerDocument = Nothing
AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet = new AdventureWorksDataSet.AdventureWorksLTDataSet(); string workbookPath = System.Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments) + @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"; ServerDocument serverDocument1 = null;
Добавьте следующий код в метод Main после кода, созданного на предыдущем шаге.Этот код выполняет следующие задачи:
Использует свойство CachedData класса ServerDocument для доступа к кэшированному набору данных в книге.
Код считывает данные из кэшированного набора данных в локальный набор данных.
Приложение отображает число строк в локальном наборе данных, чтобы подтвердить, что в нем есть данные.
Try serverDocument1 = New ServerDocument(workbookPath) Dim dataHostItem1 As CachedDataHostItem = _ serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1") Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet") If dataItem1 IsNot Nothing Then Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _ "{0} rows.", productDataSet.Product.Rows.Count.ToString()) ' Read the cached data from the worksheet dataset into the local dataset. Dim schemaReader As New System.IO.StringReader(dataItem1.Schema) Dim xmlReader As New System.IO.StringReader(dataItem1.Xml) productDataSet.ReadXmlSchema(schemaReader) productDataSet.ReadXml(xmlReader) Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _ "{0} rows.", productDataSet.Product.Rows.Count.ToString()) Else Console.WriteLine("The data object is not found in the data cache.") End If Catch ex As System.IO.FileNotFoundException Console.WriteLine("The specified workbook does not exist.") Catch ex As System.Xml.XmlException Console.WriteLine("The data object has invalid XML information.") Finally If Not (serverDocument1 Is Nothing) Then serverDocument1.Close() End If Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.") Console.ReadLine() End Try
try { serverDocument1 = new ServerDocument(workbookPath); CachedDataHostItem dataHostItem1 = serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"]; CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"]; if (dataItem1 != null) { Console.WriteLine("Before reading data from the cache dataset, the local dataset has " + "{0} rows.", productDataSet.Product.Rows.Count.ToString()); // Read the cached data from the worksheet dataset into the local dataset. System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema); System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml); productDataSet.ReadXmlSchema(schemaReader); productDataSet.ReadXml(xmlReader); Console.WriteLine("After reading data from the cache dataset, the local dataset has " + "{0} rows.", productDataSet.Product.Rows.Count.ToString()); } else { Console.WriteLine("The data object is not found in the data cache."); } } catch (System.IO.FileNotFoundException) { Console.WriteLine("The specified workbook does not exist."); } catch (System.Xml.XmlException) { Console.WriteLine("The data object has invalid XML information."); } finally { if (serverDocument1 != null) { serverDocument1.Close(); } Console.WriteLine("\n\nPress Enter to close the application."); Console.ReadLine(); }
В меню Построение выберите команду Построить DataReader.
Проверка проекта
После запуска консольного приложения отображается число строк в локальном наборе данных, чтобы подтвердить, что в нем есть данные.
Тестирование книги
В Обозревателе решений щелкните правой кнопкой мыши проект DataReader, выберите Отладка и нажмите кнопку Запустить новый экземпляр.
Убедитесь, что приложение отображает количество строк локального набора данных, равное 295.
Чтобы закрыть приложение, нажмите клавишу ENTER.
Следующие действия
Подробные сведения о работе с кэшированными данными можно узнать в следующих разделах:
- Изменение данных в кэшированном наборе данных без запуска Excel.Дополнительные сведения см. в разделе Пошаговое руководство. Изменение кэшированных данных в книге на сервере.
См. также
Задачи
Пошаговое руководство. Вставка данных в книгу на сервере
Пошаговое руководство. Изменение кэшированных данных в книге на сервере