Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспортирование данных Из MsSQL c помощью С# 
:(
    Опции темы
n00d13
Дата 26.7.2005, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2005

Репутация: нет
Всего: нет



Есть софтина выбираюшие данные из бд на MsSQL через ADO.NET
А вот как сделать чтобы она эти данные могла загонять в фаил *.doc/*.xls
Вопрос как вот реализовать такую вешЧь с помошью C#???
Спасибо.
PM MAIL   Вверх
Дрон
Дата 26.7.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



Цитата(n00d13 @ 26.7.2005, 16:22)
Вопрос как вот реализовать такую вешЧь с помошью C#???

При помощи Excel (или Word) automation, естественно smile

Только для этого, к сожалению, нужен установленный офис.

ЗЫ: Я бы рекомендовал использовать XML совместно с XSLT для создания читаемых документов на основе выборок.




--------------------
Да. Именно так.
PM   Вверх
Дрон
Дата 26.7.2005, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



Если пользуемся Visual Studio .NET

То жмём правой кнопкой на References проекта -> Add Reference...
Вкладка COM
Там выбираем Microsoft Excel xx Object Library (где xx - версия библиотеки, для Excel 2003 - 11.0)
Двойной щелчок по ней, жмём ОК.

Теперь в проекте пишем что-то вроде

Код

            Excel.Application app = new Excel.ApplicationClass();
            app.Workbooks.Add(Type.Missing);
            Excel.Worksheet ws = (Excel.Worksheet)app.Worksheets[1];
            for(int i=1;i<=10;i++)
                for(int j=1;j<=10;j++)
                    (ws.Cells[i,j] as Excel.Range).set_Value(Type.Missing,i*j);
            ws.SaveAs(@"C:\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            app.Quit();


В итоге в файле C:\test.xls будет таблица умножения smile

Внимание:
Если выкидывает исключение Access Denied, то делаем следующие манипуляции:
Запускаем из командной строки: dcomcnfg
В нём находим Microsoft Excel Application (в WinXP оно в Component Services\Computers\My Computer\DCOM Config)
Правой кнопкой -> Properties
Вкладка Security -> Группа Access Permissions
Устанавливаем Customize, жмём Edit добавляем своего пользователя с флажком Allow.

Это сообщение отредактировал(а) Дрон - 26.7.2005, 17:09


--------------------
Да. Именно так.
PM   Вверх
master of universe
Дата 26.7.2005, 21:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не надо так извращаться. Пишешь всё в HTML файлик потом открываешь вордом экселем браузером любым другим офисным пакетом. Эксель отлично понимает таблицы. Забудь про ком и совместимости версий оффиса у клиентов.
  Вверх
mr.DUDA
Дата 26.7.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(master @ 26.7.2005, 21:54)

Не надо так извращаться. Пишешь всё в HTML файлик потом открываешь вордом экселем браузером любым другим офисным пакетом. Эксель отлично понимает таблицы. Забудь про ком и совместимости версий оффиса у клиентов.

Изврат, имхо. Эксель стопудово понимает только CSV-формат с разделителями, либо свой "родной" формат.


--------------------
user posted image
PM MAIL WWW   Вверх
n00d13
Дата 27.7.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2005

Репутация: нет
Всего: нет



10x всем за ответы!
--
2Дрон,
А можно код с комментами ?
зы. НУ ньюб я. 8)
PM MAIL   Вверх
Дрон
Дата 27.7.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



Цитата(n00d13 @ 27.7.2005, 16:10)
А можно код с комментами ?
зы. НУ ньюб я. 8)

Странные для новичка задачи ты ставишь smile
Как создать проект и сделать выборку из базы ты, надеюсь, знаешь?

Код

// открываем ёксель 
            Excel.Application app = new Excel.ApplicationClass();
// добавляем новую книгу (Workbook)
            app.Workbooks.Add(Type.Missing);
// выбираем первый лист (Worksheet) из книги
            Excel.Worksheet ws = (Excel.Worksheet)app.Worksheets[1];
// циклы
            for(int i=1;i<=10;i++)
                for(int j=1;j<=10;j++)
// в ячейку i,j пишем значение i*j
                    (ws.Cells[i,j] as Excel.Range).set_Value(Type.Missing,i*j);
//  сохраняем документ
            ws.SaveAs(@"C:\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// закрываем ёксель
            app.Quit();


По хорошему надо MSDN почитать по этому поводу, т.к. реально я этот код набросал методом тыка и детали объяснить не могу.


ЗЫ: Я бы всё-таки не извращался а сделал так:
Код
select ... from ... for xml

к результату выборки добавил бы нужный xsl и получил бы готовый документ, который можно смотреть хоть в Internet Explorer, хоть в Microsoft Word


--------------------
Да. Именно так.
PM   Вверх
n00d13
Дата 28.7.2005, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2005

Репутация: нет
Всего: нет



Цитата
Странные для новичка задачи ты ставишь smile
Как создать проект и сделать выборку из базы ты, надеюсь, знаешь?

ДА.Это сделал.
Тогда можно мушшина я вас дальше попытаю?
Вопрос в том. Если вы знаете какой код минимизирует и ресторит приложение.
А то закрывать как занем а вот такие рюшечки незнаем.
Ааа ещё как заставлять приложение сворачивать в трей?
Иконка то делаеться а как сворачивать. Незнамо 8)
Зарание благодарю.


PM MAIL   Вверх
mr.DUDA
Дата 28.7.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Модератор: Пожалуйста, один топик - один вопрос.

Цитата(n00d13 @ 28.7.2005, 07:08)
Если вы знаете какой код минимизирует и ресторит приложение.

this.WindowState = FormWindowState.Minimized;
и
this.WindowState = FormWindowState.Normal;

Цитата(n00d13 @ 28.7.2005, 07:08)
Ааа ещё как заставлять приложение сворачивать в трей?

Просто делай this.Visible = false при сворачивании формы, и this.Visible = true при клике по иконке в трее. Чтобы узнать о том, что форма свёрнута, подписывайся на событие Resize:
Код

        private void Form1_Resize(object sender, System.EventArgs e)
        {
            if(this.WindowState == FormWindowState.Minimized)
                this.Visible = false;
        }




--------------------
user posted image
PM MAIL WWW   Вверх
n00d13
Дата 28.7.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2005

Репутация: нет
Всего: нет



2 Дрон,
Всё работает только пришлось сделать так
Код

Microsoft.Office.Interop.Excel

По другому не хотел бегать.

А можешь объяснить этот момент.
Код

            for(int i=1;i<=10;i++)    
                for(int j=1;j<=10;j++)    

                    (ws.Cells[i,j] as Excel.Range).set_Value(Type.Missing,i*j);

Что тут каr дышит,почему работает?
Просто хотел прикрутить сюда чтобы он высасывал всё из MsSQL через адаптЕр.
зы.Кста полазил на MSDN там всё по другому чем у тебя но тоже работает.(странно 8)

2 Модератор,
Извиняюсь.Просто тут отвечают на мои глупости я подумал может это временно и завтро не будут вот и оплошал.

Это сообщение отредактировал(а) n00d13 - 28.7.2005, 14:28
PM MAIL   Вверх
Дрон
Дата 28.7.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



Microsoft.Office.Interop.Excel -- это вроде от других версий ёкселя. Но разницы никакой.

Самая интересная строчка тут:

Код
(ws.Cells[i,j] as Excel.Range).set_Value(Type.Missing,i*j);


В ней в ячейку на i-й строке j-м столбце записывается значение i*j.

Пусть у тебя есть DataTable с именем tbl. Чтобы перенести её на лист екселя тебе нужно написать что-то вроде (не проверял, но по-идее так):
Код

for(int i=0; i< tbl.Rows.Count; i++)
   for(int j=0; j<tbl.Columns.Count; j++)
       (ws.Cells[i+1 ,j+1] as Excel.Range).set_Value(Type.Missing, tbl.Rows[i][j].ToString());



--------------------
Да. Именно так.
PM   Вверх
n00d13
Дата 28.7.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2005

Репутация: нет
Всего: нет



2 Дрон,
10x Всё пашит только пришло дополнительно ДатаТаблю делать.(У мну просто были дата сорсы с дбГридо)
зы.Чувак я твой фанат!
зыы.Ещё раз спасибо!
PM MAIL   Вверх
Дрон
Дата 4.8.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



Подниму тему, т.к. нашёл в своём коде недочёт smile

Нужно писать не так:
Код
Excel.Application app = new Excel.ApplicationClass();

а вот так:
Код
Excel.Application app = new Excel.Application();


Источник: http://blogs.msdn.com/ptorr/archive/2004/2/5.aspx



--------------------
Да. Именно так.
PM   Вверх
Papirus
Дата 5.8.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата
а вот так:

код C#
Код

1:

Excel.Application app = new Excel.Application();

Я наступил на эти грабли, когда сделал такую ссылку. У меня Офис 2003 - у пользователей ХР. Облом.
Удали ссылку на EXCEL из References, использовал такое объявление (пардон, что ВБ) и заработало у всех независимо от версии Офиса.
Код


Dim app, ws  as Object

app = CreateObject("Excel.Application")
ws = app.Worksheets.Add

Прикиньте еще такой момент. В прежних версиях ADO для вставки набора записей из рекордсета в EXCEL достаточно было одной строки (оч быстро работает)

Код

ws.Range("A1").CopyromRecordset  rs

где rs - открытый рекордсет.
Точно также в массив ячеек можно вставить данные из массива одной командой, определив предварительно область вставки в точности совпадающей с размерностью и количестьвом элементов массива. Вероятно из таблицы датасета тоже можно, но не пробовал - нет пока потребности.
Добавлено @ 09:48
CopyFromRecordset пардон так правильно
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.