Экспорт данных в 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();
}
}
}