Лучший отвечающий
Перенос данных из DataSet в Excel

Вопрос
-
Добрый вечер.
Есть лист Excel и он уже отфармотирован, т.е. столбцы с заголовками и т.д. Все красиво. Задача залить данные из DataSet в этот лист и в определенные столбцы.
В Excel есть способ Данные => Импорт внешних данных => Создать запрос
Все прекрасно так получается без форматирования правда. Но мне надо создать параметрический запрос и вывести его на этот отфармотированный лист. Есть я думаю и другие способы, вижу пока этот.
Спасибо.
26 июля 2013 г. 14:24
Ответы
-
- Помечено в качестве ответа Dmitriy VereshchakMicrosoft contingent staff, Moderator 5 августа 2013 г. 13:39
1 августа 2013 г. 5:37 -
Сдаюсь.
Вот код. Как при этом узнать что запущено приложение.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using System.Reflection; using Microsoft.Office.Interop.Excel; namespace Catalog2010 { class ExportToExcel { public const string UID = "Excel.Application"; object oExcel, oWorkBooks, oWorkSheets, oWorkBook, oWorkSheet, oRange; /// <summary> /// Имя листа в книге на который ссылаемся /// </summary> private string NameList { get; set; } /// <summary> /// Адрес книги (файла), на который хотим получить ссылку /// </summary> private string Path { get; set; } public ExportToExcel() { } public ExportToExcel(string _path, DataSet dsExcel, string _nameList) { StartExcel(); NameList = _nameList; Path = _path; OpenDocument(); dsExcel_Load(dsExcel); } private void StartExcel() { var app = oExcel as Application; if (app == null) { //Возвращает тип с заданным идентификатором progUI Type tExcelObj = Type.GetTypeFromProgID(UID); //Создается экземпляр указанного типа из tExcelObj oExcel = Activator.CreateInstance(tExcelObj); ; } else { System.Windows.Forms.MessageBox.Show("Excel запущен"); } } //Получение ссылки на работающий Excel public object GetActiveExcel() { //Необходима ссылка на System.Runtime.InteropServices return (oExcel = Marshal.GetActiveObject(UID)); } public bool Visible { set { if (false == value) oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, oExcel, new object[] { false }); else oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, oExcel, new object[] { true }); } } //Открыть документ public void OpenDocument() { oWorkBooks_Get_Reference(); oWorkBook_Get_Reference(Path); oWorkSheets_Get_Reference(); oWorkSheet_Get_Reference(NameList); oRange_Get_Reference(); } public string GetName_oWorkBook() { return (oWorkBook.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, oWorkBook, null)).ToString(); } private object oRange_Get_Reference() { //Доступ к диапазону листа oRange = oWorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, oWorkSheet, new object[1] { "A1" }); return (oRange); } private object oWorkSheet_Get_Reference(string nameList) { //Доступ к листу по имени из коллекции листов книги object[] args = new object[1]; args[0] = nameList; oWorkSheet = oWorkSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, oWorkSheets, args); return (oWorkSheet); } private object oWorkSheets_Get_Reference() { //Доступ к коллекции листов книги oWorkSheets = oWorkBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, oWorkBook, null); return (oWorkSheets); } private object oWorkBook_Get_Reference(string path) { //Доступ к книге по названию файла oWorkBook = oWorkBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, oWorkBooks, new object[] { path, true }); return (oWorkBook); } private object oWorkBooks_Get_Reference() { //Необходима ссылка на System.Reflection //Ссылка на коллекцию книг oWorkBooks = oExcel.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, oExcel, null); return (oWorkBooks); } //Закрыть документ public void CloseDocument() { object[] args = new object[1]; //Закрываем с изменениями args[0] = true; oWorkBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, oWorkBook, args); } //Закрыть документ public void CloseDocumentToName(string path) { object[] args = new object[2]; //Закрываем без изменений args[0] = false; args[1] = path; oWorkBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, oWorkBook, args); } //Для того, чтобы корректно завершить работу с приложением Excel public void DisposingExcel() { //Уничтожение объекта Excel Marshal.ReleaseComObject(oExcel); //Вызываем сборщик мусора для немедленной очистки памяти GC.GetTotalMemory(true); } }//class ExportToExcel
Как потом узнать что книга с таким названием открыта.- Изменено hochuznat 1 августа 2013 г. 14:04
- Помечено в качестве ответа Dmitriy VereshchakMicrosoft contingent staff, Moderator 5 августа 2013 г. 13:39
1 августа 2013 г. 14:02
Все ответы
-
Если нужно, чтобы красиво, делайте макросом.26 июля 2013 г. 15:44
-
Добрый.
Я хотел-бы из проги подгрузить этот лист Excel и вставить данные из DataSet.
28 июля 2013 г. 19:58 -
Внимательно прочитай обсуждение http://nowa.cc/showthread.php?t=174666
Да, я Жук, три пары лапок и фасеточные глаза :))
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 29 июля 2013 г. 8:45
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 31 июля 2013 г. 6:16
- Снята пометка об ответе hochuznat 1 августа 2013 г. 5:28
29 июля 2013 г. 2:31 -
- Помечено в качестве ответа Dmitriy VereshchakMicrosoft contingent staff, Moderator 5 августа 2013 г. 13:39
1 августа 2013 г. 5:37 -
Сдаюсь.
Вот код. Как при этом узнать что запущено приложение.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using System.Reflection; using Microsoft.Office.Interop.Excel; namespace Catalog2010 { class ExportToExcel { public const string UID = "Excel.Application"; object oExcel, oWorkBooks, oWorkSheets, oWorkBook, oWorkSheet, oRange; /// <summary> /// Имя листа в книге на который ссылаемся /// </summary> private string NameList { get; set; } /// <summary> /// Адрес книги (файла), на который хотим получить ссылку /// </summary> private string Path { get; set; } public ExportToExcel() { } public ExportToExcel(string _path, DataSet dsExcel, string _nameList) { StartExcel(); NameList = _nameList; Path = _path; OpenDocument(); dsExcel_Load(dsExcel); } private void StartExcel() { var app = oExcel as Application; if (app == null) { //Возвращает тип с заданным идентификатором progUI Type tExcelObj = Type.GetTypeFromProgID(UID); //Создается экземпляр указанного типа из tExcelObj oExcel = Activator.CreateInstance(tExcelObj); ; } else { System.Windows.Forms.MessageBox.Show("Excel запущен"); } } //Получение ссылки на работающий Excel public object GetActiveExcel() { //Необходима ссылка на System.Runtime.InteropServices return (oExcel = Marshal.GetActiveObject(UID)); } public bool Visible { set { if (false == value) oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, oExcel, new object[] { false }); else oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, oExcel, new object[] { true }); } } //Открыть документ public void OpenDocument() { oWorkBooks_Get_Reference(); oWorkBook_Get_Reference(Path); oWorkSheets_Get_Reference(); oWorkSheet_Get_Reference(NameList); oRange_Get_Reference(); } public string GetName_oWorkBook() { return (oWorkBook.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, oWorkBook, null)).ToString(); } private object oRange_Get_Reference() { //Доступ к диапазону листа oRange = oWorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, oWorkSheet, new object[1] { "A1" }); return (oRange); } private object oWorkSheet_Get_Reference(string nameList) { //Доступ к листу по имени из коллекции листов книги object[] args = new object[1]; args[0] = nameList; oWorkSheet = oWorkSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, oWorkSheets, args); return (oWorkSheet); } private object oWorkSheets_Get_Reference() { //Доступ к коллекции листов книги oWorkSheets = oWorkBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, oWorkBook, null); return (oWorkSheets); } private object oWorkBook_Get_Reference(string path) { //Доступ к книге по названию файла oWorkBook = oWorkBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, oWorkBooks, new object[] { path, true }); return (oWorkBook); } private object oWorkBooks_Get_Reference() { //Необходима ссылка на System.Reflection //Ссылка на коллекцию книг oWorkBooks = oExcel.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, oExcel, null); return (oWorkBooks); } //Закрыть документ public void CloseDocument() { object[] args = new object[1]; //Закрываем с изменениями args[0] = true; oWorkBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, oWorkBook, args); } //Закрыть документ public void CloseDocumentToName(string path) { object[] args = new object[2]; //Закрываем без изменений args[0] = false; args[1] = path; oWorkBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, oWorkBook, args); } //Для того, чтобы корректно завершить работу с приложением Excel public void DisposingExcel() { //Уничтожение объекта Excel Marshal.ReleaseComObject(oExcel); //Вызываем сборщик мусора для немедленной очистки памяти GC.GetTotalMemory(true); } }//class ExportToExcel
Как потом узнать что книга с таким названием открыта.- Изменено hochuznat 1 августа 2013 г. 14:04
- Помечено в качестве ответа Dmitriy VereshchakMicrosoft contingent staff, Moderator 5 августа 2013 г. 13:39
1 августа 2013 г. 14:02