Запись данных Excel в C#
В этом примере показано, как записывать данные Excel в рабочую книгу. Вы можете сделать это, открыв приложение Excel и используя его в качестве сервера для управления книгами Excel.
Сначала откройте диалоговое окно «Добавить ссылки». На вкладке COM выберите «Библиотека объектов Microsoft Excel 14.0» (или любую другую версию, которую вы установили в своей системе).
Затем добавьте следующую инструкцию using, чтобы упростить работу с пространством имен Excel. Часть Excel = означает, что вы можете использовать Excel как псевдоним для пространства имен.
using Excel = Microsoft.Office.Interop.Excel;
В этом примере используется следующий код, чтобы открыть книгу, добавить в нее новый лист, записать на рабочий лист, сохранить изменения и закрыть все.
// Запись в книгу Excel. private void btnWrite_Click(object sender, EventArgs e) { // Получить объект приложения Excel. Excel.Application excel_app = new Excel.ApplicationClass(); // Сделать Excel видимым (необязательно). excel_app.Visible = true; // Откройте книгу. Excel.Workbook workbook = excel_app.Workbooks.Open( txtFile.Text, 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); // Посмотрим, существует ли рабочий лист. string sheet_name = DateTime.Now.ToString("MM-dd-yy"); Excel.Worksheet sheet = FindSheet(workbook, sheet_name); if (sheet == null) { // Добавить лист в конце. sheet = (Excel.Worksheet)workbook.Sheets.Add( Type.Missing, workbook.Sheets[workbook.Sheets.Count], 1, Excel.XlSheetType.xlWorksheet); sheet.Name = DateTime.Now.ToString("MM-dd-yy"); } // Добавить некоторые данные в отдельные ячейки. sheet.Cells[1, 1] = "A"; sheet.Cells[1, 2] = "B"; sheet.Cells[1, 3] = "C"; // Делаем этот диапазон ячеек жирным и красным. Excel.Range header_range = sheet.get_Range("A1", "C1"); header_range.Font.Bold = true; header_range.Font.Color = System.Drawing.ColorTranslator.ToOle( System.Drawing.Color.Red); header_range.Interior.Color = System.Drawing.ColorTranslator.ToOle( System.Drawing.Color.Pink); // Добавьте некоторые данные в диапазон ячеек. int[,] values = { { 2, 4, 6}, { 3, 6, 9}, { 4, 8, 12}, { 5, 10, 15}, }; Excel.Range value_range = sheet.get_Range("A2", "C5"); value_range.Value2 = values; // Сохраните изменения и закройте книгу. workbook.Close(true, Type.Missing, Type.Missing); // Закройте сервер Excel. excel_app.Quit(); MessageBox.Show("Done"); }
Сначала код создает объект Excel.Application для управления Excel. Это делает этот объект видимым, чтобы вы могли наблюдать за его работой. Часто вы не хотите, чтобы сервер был видимым.
Далее код открывает рабочую книгу. Большинство параметров метода Open являются необязательными (например, пароли и флаги, указывающие на то, что вы хотите открыть файл только для чтения), поэтому им присваивается значение Type.Missing . р>
Затем код вызывает метод FindSheet, описанный в ближайшее время, чтобы узнать, содержит ли рабочая тетрадь рабочий лист с именем текущей даты. (Извините за жесткое кодирование в формате даты. Обычно я бы использовал DateTime.Now.ToShortDate (), чтобы получить подходящую дату, но, по крайней мере, для меня он будет содержать / символы, которые не являются разрешено в именах рабочих листов.)
Если нет рабочего листа с этим именем, код создает его, добавляет его после последнего рабочего листа и устанавливает имя листа на текущую дату.
Далее код устанавливает значения трех ячеек отдельно. Он создает Range, представляющий эти три ячейки, и устанавливает их значения Font.Bold, Color и Interior.Color . р>
Затем код показывает, как установить значения листа из массива. Он создает 2-мерный массив, делает Range того же размера и устанавливает свойство Range объекта Value2 в массив, чтобы установить значения клеток.
Наконец, код закрывает книгу, сохраняет изменения и закрывает сервер Excel.
В следующем коде показан метод FindSheet.
// Вернуть рабочий лист с заданным именем. private Excel.Worksheet FindSheet(Excel.Workbook workbook, string sheet_name) { foreach (Excel.Worksheet sheet in workbook.Sheets) { if (sheet.Name == sheet_name) return sheet; } return null; }
Этот метод просто просматривает рабочие листы книги, чтобы увидеть, содержит ли он имя с указанным именем.