9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
1

Экспорт данных в Excel

09.01.2011, 12:25. Показов 82598. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, приветствую, практически закончил один из своих первых не комерческих, но достаточно ответственных проектов. Но встал, что называется, на предпоследней ступени - это реализация отправки содержимого ричтекстбокса (а туда выводятся сугубо сублимированные данные, типа резултьты расчетов формул, которые собственно фискируются у меня в разных текстбоксах.) в эксель.

Видел ряд обсуждений на эту тему в формуе, однако возникли следующего рода вопросы:

Мне нужно чтобы при нажатии на кнопку, запускалась обработка следующей процедуры.

0. Создавался новый файл эксель с определенными полями

1. Как сделать так, чтобы в определенные ячейки с названиями, я закатал нужную инфу.

2. Реализовать заполнение поля дата/тайм, чтобы при открытии файла было видно когда была выполнена обработка.

3. Сохранение файла в определенной папке.

Процедура должна создавать каждый раз новый файл. Тоесть пункт 0 обязательно должен выполняться по новой.
Это нужно для той цели чтобы этот файл потом можно было отправлять по имайл.


Очень жду советов корифеев.

Заранее благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2011, 12:25
Ответы с готовыми решениями:

Экспорт данных из таблицы Excel в шаблон Excel
Добрый день! Проблемка заключается в следующем: В папке debug во вложении есть файл...

Экспорт данных в Excel
Добрый день! Помогите, пожалуйста: как Экспортировать данные из программы C# в Excel. Заранее...

Экспорт данных в Excel
Самым внизу есть код отрытый отправлается на Excel но не работает в чем ошибка не понимаю ? ...

Экспорт данных в Excel
Необходимо из БД (mysql) ежедневно формировать отчеты по указанным формам. В Report Viewer...

21
823 / 714 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
09.01.2011, 14:53 2
Лучший ответ Сообщение было отмечено как решение

Решение

Добавляем сборку Microsoft.Office.Interop.Excel.dll.
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
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
using Microsoft.Office.Interop.Excel;
 
using Application = Microsoft.Office.Interop.Excel.Application;
 
namespace WindowsFormsApplicationTest2 {
    public partial class MainForm : Form {
        private Application application;
        private Workbook workBook;
        private Worksheet worksheet;
 
        public MainForm() {
            InitializeComponent();
        }
 
        // Передаём данные в Excel
        private void buttonToExcel_Click( object sender, EventArgs e ) {
            // Открываем приложение
            application = new Application {
                DisplayAlerts = false
            };
 
            // Файл шаблона
            const string template = "template.xlsm";
 
            // Открываем книгу
            workBook = application.Workbooks.Open( Path.Combine( Environment.CurrentDirectory, template ) );
 
            // Получаем активную таблицу
            worksheet = workBook.ActiveSheet as Worksheet;
 
            // Записываем данные
            worksheet.Range[ "A2" ].Value = DateTime.Now;
            worksheet.Range[ "A4" ].Value = textData1.Text;
            worksheet.Range[ "A6" ].Value = textData2.Text;
            for ( int i = 0; i < checkedListData3.Items.Count; i++ ) {
                worksheet.Cells[ i + 8, 1 ].Value = checkedListData3.Items[ i ];
                worksheet.Cells[ i + 8, 2 ].Value = checkedListData3.GetItemChecked( i ) ? "Checked" : "Unchecked";
            }
 
            // Показываем приложение
            application.Visible = true;
            TopMost = true;
 
            buttonCloseExcel.Enabled = true;
        }
 
        private void buttonCloseExcel_Click( object sender, EventArgs e ) {
            // Сохраняем и закрываем 
            string savedFileName = "book1.xlsm";
            workBook.SaveAs( Path.Combine( Environment.CurrentDirectory, savedFileName ) );
            CloseExcel();
        }
 
        private void CloseExcel() {
            if ( application != null ) {
                int excelProcessId = -1;
                GetWindowThreadProcessId( application.Hwnd, ref excelProcessId );
 
                Marshal.ReleaseComObject( worksheet );
                workBook.Close();
                Marshal.ReleaseComObject( workBook );
                application.Quit();
                Marshal.ReleaseComObject( application );
 
                application = null;
                // Прибиваем висящий процесс
                try {
                    Process process = Process.GetProcessById( excelProcessId );
                    process.Kill();
                }
                finally {}
            }
        }
 
        [DllImport( "user32.dll", SetLastError = true )]
        static extern uint GetWindowThreadProcessId( int hWnd, ref int lpdwProcessId );
 
        private void MainForm_FormClosed( object sender, FormClosedEventArgs e ) {
            CloseExcel();
        }
    }
}
Автоматизация Microsoft Excel в Microsoft Visual C# .NET
WindowsFormsApplicationTest2.zip
8
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
10.01.2011, 01:34  [ТС] 3
Елыыыы зеленые Unril, спасибо за подробнейший ответ. Все по полочкам.


Благодарствую.


Буду колдовать дальше!!!!

Добавлено через 2 часа 39 минут
Черт побъери так и думал что столкнусь с стандартной проблемой



The type or namespace name 'Office' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) C:\Users\Администратор\Documents\Visual Studio 2008\Projects\exceltry\exceltry\Form1.cs
0
823 / 714 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
10.01.2011, 10:47 4
Написал же
Цитата Сообщение от Unril Посмотреть сообщение
Добавляем сборку Microsoft.Office.Interop.Excel.dll.
Практическое руководство. Добавление и удаление ссылок в Visual Studio (C#)
К тому же, на компьютере должен быть установлен excel.
Сам проект под 2010 студию и .NET 4.0.
1
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
10.01.2011, 17:53 5
Есть неплохой класс для создания файлов эксель, добавления в ячейки текста , картинок, слияния ячеек и тд. Я пробовал - удобно
Вложения
Тип файла: rar Excel.rar (1.5 Кб, 1608 просмотров)
5
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
10.01.2011, 21:32  [ТС] 6
Ну вот именно это я и делал. Ссылка была подключена, в окне референсис, она фигурировала.

Однако при попытке запустить приложение, она подчеркивала Office и выдавала выше озвученную ошибку.

VS у меня 2008.
MS Officw 2003.
0
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
12.01.2011, 10:33  [ТС] 7
Все народ, выручайте, мой мозг потек в сапоги.

Вроде только только разобрался во всем этом колоброде под названием работае с эксель.
Теперь мне назойливо встречается в тех или иных ситуациях вот такая дребедень:

Использован старый формат, либо библиотека имеет неверный тип. (Исключение из HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))
Бракует строку:
C#
1
ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
Сил моих уже нет.
Я так подозреваю это конфликт версий Excel и .Net сборки которую я цепляю?

Я уже забил на основной проект и сделал примитив типа такого, чтобы в подробностях разобраться.

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
 
 
namespace excelexperiment
{
    public partial class Form1 : Form
    {
        Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
        Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
            ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
            ObjWorkSheet.Cells[3, 1] = "Имя";
            ObjWorkSheet.Cells[3, 2] = "Фамилия";
            ObjWorkSheet.Cells[3, 3] = "Пол";
            ObjExcel.Visible = true;
            ObjExcel.UserControl = true;
 
        }
    }
         
 }
Удавалось только открыть файл эксель, но при попытке воткнуть туда листы и книги возникало это дебильное сообщение.
Подскажите пожалуйста.

Версия мс офиса 2003
Версия вижуал студии 2008.
0
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
17.01.2011, 20:53  [ТС] 8
Народ помогите плиз на конкретном примерчике.
Я уже описывал ситуацию, но все же освежу.

Мне нужно чтобы по нажатию на кнопочку осуществлялось:
1. Открытие файла tz.xls (там форма технического задания, в которое заполняется то что было расчитанно и введено в программе)
2. Перенос в определенные ячейки готовой таблицы моих данных из проги.

Основной принцип реализации я конечно знаю, единственное что не могу описать обращение к нужным ячейкам.

Вот пример того как я начал а вот как описать далее обращение в этом файле к конкретной ячейке я не знаю.

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace WindowsFormsApplication2
{
    
    public partial class Form1 : Form
    {
       
        
        private Excel.Application excelapp;
        private Excel.Window excelWindow;
        public Form1()
        {
            InitializeComponent();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
                excelapp = new Excel.Application();
                excelapp.Visible = true;
                excelapp.Workbooks.Open(@"D:\tz.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing);
                excelapp.Workbooks.Open(@"D:\tz.xls",
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing);
                
        }
    }
}
Помогите плиз я уже все вроде перечитал по этой дурной теме.
0
823 / 714 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
17.01.2011, 21:02 9
Цитата Сообщение от Unril Посмотреть сообщение
worksheet.Range[ "A6" ].Value = textData2.Text;
Я же писал в примере.
0
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
18.01.2011, 13:48  [ТС] 10
Увжаемый Unril, подставляя
такую
C#
1
worksheet.Range[ "A6" ].Value = textData2.Text;
тему после моего кода который я описал выше. он ругается на worksheet.

Я так понимаю мне его в моем конкретном коде где-то декларировать надо, прежде чем описывать его методы и свойства.
Я так понимаю именно с этим у меня проблемы (
0
27 / 24 / 1
Регистрация: 26.07.2011
Сообщений: 144
17.10.2011, 09:21 11
using Excel = Microsoft.Office.Interop.Excel; как эта строка будет выглядеть в Visual C++ подскажите пожалуйста, а то я уже задолбался бороться с конфликтом пространств имен.
0
128 / 128 / 8
Регистрация: 24.11.2010
Сообщений: 237
17.10.2011, 09:31 12
Посмотри в сторону вот этой библиотеки
Вложения
Тип файла: zip Debug.zip (342.1 Кб, 526 просмотров)
0
27 / 24 / 1
Регистрация: 26.07.2011
Сообщений: 144
17.10.2011, 09:34 13
Там на С#
0
128 / 128 / 8
Регистрация: 24.11.2010
Сообщений: 237
17.10.2011, 09:36 14
там в папке лежит прога, с помощью которой из нужного тебе excel файла, генерирует код. кототрый нужен чтобы его создать

Добавлено через 54 секунды
конечно на c#
я сам ей уже полгода пользуюсь, генерирует какие хочешь xls файлы

Добавлено через 56 секунд
я долго ее искал
0
27 / 24 / 1
Регистрация: 26.07.2011
Сообщений: 144
17.10.2011, 09:37 15
Братец, мне на С++ надо это перевести)
0
128 / 128 / 8
Регистрация: 24.11.2010
Сообщений: 237
17.10.2011, 09:38 16
к сожалению пример не могу скинуть, т.к. использую в одном проекте ее

Добавлено через 58 секунд
сори, не увидел. Ну тебе тогда в другой раздел, где C++ обсуждают, этот то раздел по C#
0
27 / 24 / 1
Регистрация: 26.07.2011
Сообщений: 144
17.10.2011, 09:44 17
Там не могут ответить на этот вопрос
0
128 / 128 / 8
Регистрация: 24.11.2010
Сообщений: 237
17.10.2011, 09:46 18
поищи что нибудь про то как использовать библиотеки на C# в приложениях на c++! наоборот я точно знаю что можно использовать
0
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 69
11.05.2012, 19:00 19
Добрый день. Возникла проблема с экспортом данных из ListView в эксель. Использую такой алгоритм, на который везде натыкаюсь на зарубежных форумах, хотя вроде и на наших встречал.
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
private void button2_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "Лист Excel (*.xls)|*.xls";
            saveFileDialog1.FileName = "";
            saveFileDialog1.Title = "Экспорт в Excel";
            StringBuilder sb = new StringBuilder();
          
            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
            app.Visible = true;
            Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(1);
            Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
 
            int i = 2;
            int i2 = 3;
            foreach (ListViewItem lvi in listView1.Items)
            {
                i = 2;
                foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems)
                {
                    ws.Cells[i2, i] = lvs.Text;
                    i++;
                }
                i2++;
            }
        }
Этот код всё копирует, но есть одно но... после экспорта данных в эксель первый SubItem дублируется в конце записей. Бред какой-то если честно. Как от него избавиться?

И еще один вопрос. Я воспользовался этой прогой, которую предоставил galexser. Но где и как в коде, что написан выше, записать форматирование из этой программы. В С# работаю в один из первых разов, поэтому прошу разъяснить по-подробней.
0
2 / 2 / 5
Регистрация: 08.01.2012
Сообщений: 132
27.12.2016, 19:13 20
У меня другая проблема. При экспорте из датагрид открывается файл экзель,где все числа в текстовом формате. Как сделать чтобы были в числовом сразу?
Вот код:
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
private void ExportToExcel()
         {
             Microsoft.Office.Interop.Excel.Application exApp = new Microsoft.Office.Interop.Excel.Application();
          //   Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
          
             Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
             Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
             //Книга.
             ObjWorkBook = exApp.Workbooks.Add(System.Reflection.Missing.Value);
             //Таблица.
             ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
             exApp.Workbooks.Add();
             Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)exApp.ActiveSheet;
             workSheet.Cells[1, 1] = "x";
             workSheet.Cells[1, 2] = "Prls";
             workSheet.Cells[1, 3] = "Prlspv";
             workSheet.Cells[1, 4] = "Pvihrls";
             int rowExcel = 2; //начать со второй строки.
             for (int i = 0; i < result_grid.Rows.Count; i++)
             {
                 //заполняем строку
                 workSheet.Cells[rowExcel, "A"] = result_grid.Rows[i].Cells["x"].Value;
                 workSheet.Cells[rowExcel, "B"] = result_grid.Rows[i].Cells["Prls"].Value;
                 workSheet.Cells[rowExcel, "C"] = result_grid.Rows[i].Cells["Prlspv"].Value;
                 workSheet.Cells[rowExcel, "D"] = result_grid.Rows[i].Cells["Pvihrls"].Value;
                 ++rowExcel;
                 
             }
             
             string pathToXmlFile;
                 pathToXmlFile = Environment.CurrentDirectory + "\" + "MyFile.xls";
             pathToXmlFile.Replace(',', ' ');
                 workSheet.SaveAs(pathToXmlFile);
                
               // exApp.Quit();
                 exApp.Visible = true;
                 exApp.UserControl = true;
 
         }
0
27.12.2016, 19:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2016, 19:13
Помогаю со студенческими работами здесь

Экспорт данных в Excel
Всем доброго времени суток. Столкнулся с такой проблемой, при импорте в Excel, когда заношу...

Импорт/Экспорт данных Excel
Просьба помочь начинающим. Пытаюсь сделать импорт/экспорт с экселем но пока тщетно. Знания на...

Экспорт данных из DataGridView в Excel файл
Не работает метод для экспорта данных. В экселе заполняются только названия столбцов и первая...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru