Экспорт данных в Excel - C# (180908)
Формулировка задачи:
Товарищи, приветствую, практически закончил один из своих первых не комерческих, но достаточно ответственных проектов. Но встал, что называется, на предпоследней ступени - это реализация отправки содержимого ричтекстбокса (а туда выводятся сугубо сублимированные данные, типа резултьты расчетов формул, которые собственно фискируются у меня в разных текстбоксах.) в эксель.
Видел ряд обсуждений на эту тему в формуе, однако возникли следующего рода вопросы:
Мне нужно чтобы при нажатии на кнопку, запускалась обработка следующей процедуры.
0. Создавался новый файл эксель с определенными полями
1. Как сделать так, чтобы в определенные ячейки с названиями, я закатал нужную инфу.
2. Реализовать заполнение поля дата/тайм, чтобы при открытии файла было видно когда была выполнена обработка.
3. Сохранение файла в определенной папке.
Процедура должна создавать каждый раз новый файл. Тоесть пункт 0 обязательно должен выполняться по новой.
Это нужно для той цели чтобы этот файл потом можно было отправлять по имайл.
Очень жду советов корифеев.
Заранее благодарен.
Решение задачи: «Экспорт данных в Excel»
textual
Листинг программы
- 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д