locked
Перенос данных из DataSet в Excel RRS feed

  • Вопрос

  • Добрый вечер.

    Есть лист Excel и он уже отфармотирован, т.е. столбцы с заголовками и т.д. Все красиво. Задача залить данные из DataSet в этот лист и в определенные столбцы.

    В Excel есть способ Данные => Импорт внешних данных => Создать запрос

    Все прекрасно так получается без форматирования правда. Но мне надо создать параметрический запрос и вывести его на этот отфармотированный лист. Есть я думаю и другие способы, вижу пока этот.

    Спасибо.

    26 июля 2013 г. 14:24

Ответы

  • Доброе утро.

    Прежде чем чего-то добиться нужно перелопатить пол-интернета. Я выделил две ссылки для этой темы, которые мне помогли в решении моей проблемы. Здесь и это. Позже побробую выложить решение моей задачи.

    Благодарю за терпение.

    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


    Как потом узнать что книга с таким названием открыта.
    1 августа 2013 г. 14:02

Все ответы

  • Если нужно, чтобы красиво, делайте макросом.
    26 июля 2013 г. 15:44
  • Добрый.

    Я хотел-бы из проги подгрузить этот лист Excel и вставить данные из DataSet.

    28 июля 2013 г. 19:58
  • Внимательно прочитай обсуждение http://nowa.cc/showthread.php?t=174666

    Да, я Жук, три пары лапок и фасеточные глаза :))

    29 июля 2013 г. 2:31
  • Доброе утро.

    Прежде чем чего-то добиться нужно перелопатить пол-интернета. Я выделил две ссылки для этой темы, которые мне помогли в решении моей проблемы. Здесь и это. Позже побробую выложить решение моей задачи.

    Благодарю за терпение.

    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


    Как потом узнать что книга с таким названием открыта.
    1 августа 2013 г. 14:02