Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
1

Выгрузка данных в Excel из Datatable

12.02.2017, 00:12. Просмотров 3770. Ответов 17
Метки нет (Все метки)

Долго мучался, в итоге имею следующее: ошибки и код. Подскажи пожалуйста в чем ошибки, почему код не определяет объекты. Хотя библиотеки все стоят.
В чем дело?

Ошибки

C#
1
2
3
4
Ошибка 10 Имя типа "Application" не существует в
 Ошибка 11 Имя типа "_Worksheet" не существует 
 Ошибка 12 Имя типа "Worksheet" не существует 
 Ошибка 13 Имя типа "_worksheet" отсутствует в тип
Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
 
 
 
 
namespace Monitoring_v._2._0
{
    /// <summary>
ыфва
    /// </summary>
    public partial class MBPage : UserControl
    {
        public MBPage()
        {
            InitializeComponent();
        }
 
 
 
        private void 321(object sender, RoutedEventArgs e)
        {
           // System.Windows.Forms.SaveFileDialog saveSrez = new System.Windows.Forms.SaveFileDialog();
            // //saveSrez.AddExtension = true;
            // saveSrez.DereferenceLinks = false;
            // saveSrez.Title = "Экспорт в Excel";
            //  saveSrez.Filter = "Книга Excel (*.xlsx)|*.xlsx";
            //  saveSrez.DefaultExt = "xlsx";
            //   if (saveSrez.ShowDialog() == System.Windows.Forms.DialogResult.OK)
          //   {
            System.Data.DataTable dt = new System.Data.DataTable();
 
            string sql = "SELECT * from table";
                dt = ServerCommand.SQLExecute(sql);
                var ExceApp = new Excel.Application();
                ExceApp.Visible = false;
            ExceApp.Workbooks.Add();
            Excel._Worksheet worksheet = (Excel.Worksheet)ExceApp.ActiveSheet;
             ExporttoExcel(dt, worksheet);
            ExceApp.Save();
            ExceApp.Quit();
                MessageBox.Show("ок");
          
 
            //  }
 
            ///MessageBox.Show("Действие отменено");
 
        }
 
        private void ExporttoExcel(System.Data.DataTable dt, Excel._worksheet sheet)
        {
            char _excelHeader = 'A';
            foreach (DataColumn column in dt.Columns)
            {
                sheet.Cells[1, _excelHeader.ToString()] = column.ColumnName;
                _excelHeader++;
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            { 
                _excelHeader = 'A';
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    sheet.Cells[i + 2, _excelHeader.ToString()] = dt.Rows[i][j];
                    _excelHeader++;
                }
 
            }
        }
 
 
 
 
 
 
 
 
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
        System.Data.DataTable dt = new System.Data.DataTable();
            string sql = "select * from table";
            dt = ServerCommand.SQLExecute(sql);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string newDate =
                    Convert.ToDateTime(dt.Rows[i][0]).ToString("dd.MM.yyyy");
                start.Items.Add(newDate);
                finish.Items.Add(newDate);
                start.Text = start.Items[start.Items.Count - 1].ToString();
                finish.Text = finish.Items[finish.Items.Count - 1].ToString();
            }
           ////ПРОВЕРКА MessageBox.Show("ок");
        }
 
        private void PDQUART_Click(object sender, RoutedEventArgs e)
        {
 
        }
 
        private void PDYEAR1_Click(object sender, RoutedEventArgs e)
        {
 
        }
 
 
 
 
    }
 
 
 
 
 
 
 
 
 
 
 
 
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2017, 00:12
Ответы с готовыми решениями:

Выгрузка DataTable в Excel, разделители
Здравствуйте. Есть необходимость выгрузки таблицы в документ Excel. Таблица содержит в себе числа...

Выгрузка данных из БД в excel
Итак есть вывод данных в excel но она заполняется с перовой строчки, а нужно что б началась...

Выгрузка данных в Excel
Здравствуйте! Помогите реализовать выгрузку данных в Excel. Задумка такая. Есть форма, на ней DGV...

Выгрузка данных в Excel
Добрый день! Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные...

17
609 / 504 / 315
Регистрация: 20.05.2015
Сообщений: 1,419
13.02.2017, 04:07 2
C#
1
2
using Excel = Microsoft.Office.Interop.Excel;
//using Microsoft.Office.Interop.Excel;
C#
1
2
3
4
5
 dt = ServerCommand.SQLExecute(sql);
                Excel.Application ExceApp = new Excel.Application();
                ExceApp.Visible = false;
            ExceApp.Workbooks.Add();
            Excel.Worksheet worksheet = (Excel.Worksheet)ExceApp.ActiveSheet;
C#
1
2
private void ExporttoExcel(System.Data.DataTable dt, Excel.Worksheet sheet)
        {
Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 int _excelHeader = 1;
            foreach (DataColumn column in dt.Columns)
            {
                sheet.Cells[1, 1] = column.ColumnName;
                _excelHeader++;
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            { 
                _excelHeader = 1;
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    sheet.Cells[i + 2, _excelHeader+1] = dt.Rows[i][j];
                    _excelHeader++;
                }
 
            }
Добавлено через 10 минут
Ошибся
C#
1
2
3
4
5
                foreach (DataColumn column in dt.Columns)
            {
                sheet.Cells[1,  _excelHeader] = column.ColumnName;
                _excelHeader++;
            }
А вообще не проще было сделать
C#
1
2
3
4
5
dt.WriteXml(@"c:\выборка.xml"); // или ds.WriteXml(@"c:\выборка.xml");
excelapp = new Microsoft.Office.Interop.Excel.Application();
            excelapp.Workbooks.OpenXML(@"c:\Выборка.xml", 1, 0);
            excelapp.Visible = true;
            excelapp.ActiveWindow.Activate();
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 09:41  [ТС] 3
Aferuga, первый вариант ошибка не найден обьект application.
Второй вариант не найден метод excelapp прописал через var но все равно ошибка
0
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
13.02.2017, 10:03 4
ссылку "Microsoft.Office.Interop.Excel" подключили?
Мои подключения:
C#
1
2
3
 Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); // запускаем Excel для чтения входного файла
            Microsoft.Office.Interop.Excel.Workbook wb = xlApp.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "\\Template_1.xlsx"); // открываем шаблон
            Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets["Лист1"];     //  выбор листа
Добавлено через 6 минут
нужно делать как Aferuga объявить
C#
1
using Excel = Microsoft.Office.Interop.Excel;
и писать так , чтобы исключить конфликты
C#
1
 Excel.Application xlApp= new Excel.Application();
и.т.д.
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 13:13  [ТС] 5
Getsok, да в using прописал. А ваш код в какуб процедуру вставииь?

Добавлено через 5 минут
Getsok, как будет код выглядить вместе с using подскажите пожалуйста
0
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
13.02.2017, 13:29 6
Лучший ответ Сообщение было отмечено studentrm как решение

Решение

studentrm,
подключаем ссылку ,картинка во вложении
пишем в using:
C#
1
using Excel = Microsoft.Office.Interop.Excel;
в коде
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Excel.Application xlApp = new Excel.Application(); // запускаем Excel для чтения входного файла
Excel.Workbook wb = xlApp.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "\\Template_1.xlsx"); // открываем шаблон указываю документ, в который я буду записывать данные
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets["Лист1"];   //  выбор листа 
int x = 1; // строка листа excel
foreach (DataRow nc in dt.Rows) 
{
              ws.Cells[x, 1] = nc["F1"].ToString(); //F1 - название столбца в dataTable dt  //ws.Cells[x, 1]  - x-строка в excel документе; 1 - столбец
    ws.Cells[x, 2] = nc["F2"].ToString(); //F2 - название столбца в dataTable dt 
              ws.Cells[x, 3] = nc["F3"].ToString();
              ws.Cells[x, 4] = nc["F4"].ToString();
              x++;
{
wb.SaveAs(указать куда сохранить документ)
wb.Close();
xlApp.Quit();
0
Миниатюры
Выгрузка данных в Excel из Datatable  
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 13:52  [ТС] 7
Getsok, а код в кнопку или отдельной процедурой?

Добавлено через 5 минут
Getsok, applicatuon workbook worksheets не существует
0
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
13.02.2017, 13:54 8
studentrm, смотри сам, можешь в кнопку, это не принципиально.
ссылку добавили как на картинке? юзинг прописан?
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 14:07  [ТС] 9
Getsok, да. Там ссылка была
0
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
13.02.2017, 14:11 10
studentrm, вот здесь галочки надо....
Application Workbook Worksheet - относятся к Microsoft.Office.Interop
0
Миниатюры
Выгрузка данных в Excel из Datatable  
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 14:44  [ТС] 11
Getsok, все ок. Спасмбо болтшре. Скажи пожалуйста как написать пуиь в скобках куда сохранить файл

Добавлено через 6 минут
Getsok, получаю трлько одну строку данных. Хотя их 4. Получмл только шапку и одну строку
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 19:29  [ТС] 12
Getsok, ошибка выходит. Скажи пожалуйста из-за чего. Еще одна строчка запроса выходит. Хотя их 5 должно быть
0
Миниатюры
Выгрузка данных в Excel из Datatable  
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
13.02.2017, 19:58 13
studentrm, если в dt у тебя 4 строчки и ты в этом уверен, то у тебя что-то со счетчиком, проверь, что он увеличивается. Запусти отладку, поставь точку останова на строчке с ошибкой, потом наведи мышкой на nc и посмотри, как отображается строка внутри, так же можешь посмотреть, что происходит в dt.
Ошибка происходит когда пишется вторая строка?
цикл foreach (DataRow nc in dt.Rows) простыми словами означает построчный перебор dt (nc это просто строка из dt со всеми столбцами)

Добавлено через 6 минут
wb.SaveAs(Directory.GetCurrentDirectory() + @"\Название_файла_.xls");
можешь указать другую директорию.
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 19:58  [ТС] 14
Getsok, а может быть ошибка если я закоменнтил куда сохранять?
0
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
13.02.2017, 20:07 15
studentrm, нет,сделай отладку, проверь, что я тебе написал. в цикле укажи все столбцы, проверь счетчик....сделайте что нибудь)))
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 391
13.02.2017, 22:14  [ТС] 16
Getsok, dt is empty пишет
0
Warrior
496 / 423 / 177
Регистрация: 23.11.2014
Сообщений: 932
14.02.2017, 00:46 17
Требуется консультация по экспорту данных
0
14 / 14 / 2
Регистрация: 26.04.2015
Сообщений: 60
14.02.2017, 09:37 18
studentrm, где находятся данные которые требуется выгрузить в Excel?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2017, 09:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Загрузка табличных данных из excel в DataTable
Доброго дня, для взаимодействия использую сборку Microsoft.Office.Interop.Excel. Задаю приложение...

Экспорт данных DataTable, DataGridView, Excel
есть DataGridView который заполняется из бд через DataTable. Как данные из DataTable перенести в...

Выгрузка данных формы в Excel
Здравствуйте! Помогите, пожалуйста, с таким вопросом. У меня есть форма, в которой создано поле со...

Выгрузка данных из Delphi в Excel
Делаю выгрузку данных через процедуру SendtoExcel. При заполнении массива пишу следующий код:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.