вторник, 7 июня 2011 г.

Используем Microsoft Excel при помощи C# и .NET

Для того, что бы можно было начать работу с Microsoft Excel необходимо в проект добавить ссылку на COM компонент "Microsoft Excel 12.0 Object Library" после чего в проекте можно будет использовать классы из пространства имен Microsoft.Office.Interop.Excel.

Для быстрого старта и понимания работы с Microsoft Excel посредством в COM в C# достаточно базового примера - считывание из указанного файла .xlsx и запись в указанный файл. Я использовал .NET Framework 4 и Microsft Excel 2007. 

Код программы с комментариями: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MicrosoftExcel = 
    Microsoft.Office.Interop.Excel;

namespace MicrosoftExcelDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // создание объекта 
            // приложения
            MicrosoftExcel.Application application = 
                new MicrosoftExcel.Application();
            try 
            {
                // открытие диалогового 
                // окна для поиска файла 
                application.FindFile();
                // считывание данных из активного листа 
                ReadData(application.ActiveSheet);
                // запись в активный лист
                WriteData(application.ActiveSheet);                
            }
            catch(Exception e)
            {
                Console.WriteLine(
                    "Exception catched " + 
                    "with message: '{0}'", 
                    e.Message);
            }
            finally
            {
                // обязательное завершение
                // работы приложения 
                application.Quit();                            
            }
            Console.ReadKey();
        }

        static void ReadData(
            MicrosoftExcel.Worksheet workSheet)
        {
            // индексация в Microsoft Excel идет с 1
            // далее следует обход только 
            // используемой области активного листа 
            for (int row = 1; 
                row <= 
                  workSheet.UsedRange.Cells.Rows.Count; 
                row++)
            {
                for (int col = 1; 
                    col <= 
                      workSheet.UsedRange.Cells.Columns
                               .Count; 
                    col++)
                {
                    Console.Write(
                        "{0, 5} ", 
                        workSheet.UsedRange
                                 .Cells[row, col]
                                 .Value);
                }
                Console.WriteLine();
            }
        }

        static void WriteData(
            MicrosoftExcel.Worksheet workSheet)
        {
            for (int row = 1;
                row <= 
                  workSheet.UsedRange.Cells.Rows.Count; 
                row++)
            {
                for (int col = 1; 
                    col <= 
                      workSheet.UsedRange.Cells.Columns
                               .Count; 
                    col++)
                {
                    workSheet.UsedRange
                             .Cells[row, col]
                             .Value *= 10;
                }                
            }
        }
    }
}

Или вы можете скачать исходный код и файл с которым я работал здесь

Если возникнут вопросы или что-то не понятно, то обязательно спрашивайте, я всегда рад помочь!