powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Функции для работы с Excel из C#
25 сообщений из 509, страница 1 из 21
Функции для работы с Excel из C#
    #35694602
.AleXo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предлагаю в этой теме выкладывать функции для работы с Excel (написанные собственноручно)...

Код: plaintext
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.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
        public const string UID = "Excel.Application";
        object oExcel = null;
        object WorkBooks, WorkBook, WorkSheets, WorkSheet, Range, Interior;

        //КОНСТРУКТОР КЛАССА
        public Excel()
        {
            oExcel = Activator.CreateInstance(Type.GetTypeFromProgID(UID));
        }

        //ВИДИМОСТЬ EXCEL - СВОЙСТВО КЛАССА
        public bool Visible
        {
            set
            {
                if (false == value)
                    oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
                        null, oExcel, new object[] { false });

                else
                    oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
                        null, oExcel, new object[] { true });
            }
        }
        

        //ОТКРЫТЬ ДОКУМЕНТ
        public void OpenDocument(string name)
        {
            WorkBooks = oExcel.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, oExcel, null);
            WorkBook = WorkBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, WorkBooks, new object[] { name, true });
            WorkSheets = WorkBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, WorkBook, null);
            WorkSheet = WorkSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, WorkSheets, new object[] { 1 });
            // Range = WorkSheet.GetType().InvokeMember("Range",BindingFlags.GetProperty,null,WorkSheet,new object[1] { "A1" });
        }
        
        // НОВЫЙ ДОКУМЕНТ
        public void NewDocument()
        {
            WorkBooks = oExcel.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, oExcel, null);
            WorkBook = WorkBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, WorkBooks, null);
            WorkSheets = WorkBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, WorkBook, null);
            WorkSheet = WorkSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, WorkSheets, new object[] { 1 });
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, WorkSheet, new object[1] { "A1" });
        }
        //ЗАКРЫТЬ ДОКУМЕНТ
        public void CloseDocument()
        {
            WorkBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, WorkBook, new object[] { true });
        }
        //СОХРАНИТЬ ДОКУМЕНТ
        public void SaveDocument(string name)
        {
            if (File.Exists(name))
                WorkBook.GetType().InvokeMember("Save", BindingFlags.InvokeMethod, null,
                    WorkBook, null);
            else
                WorkBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null,
                    WorkBook, new object[] { name });
        }

        // ЗАПИСАТЬ ЗНАЧЕНИЕ В ЯЧЕЙКУ
        public void SetValue(string range, string value)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            Range.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, Range, new object[] { value });
        }

        //ОБЪЕДЕНИТЬ ЯЧЕЙКИ 
        // Alignment - ВЫРАВНИВАНИЕ В ОБЪЕДИНЕННЫХ ЯЧЕЙКАХ
        public void SetMerge(string range, int Alignment)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            object[] args = new object[] { Alignment };
            Range.GetType().InvokeMember("MergeCells", BindingFlags.SetProperty, null, Range, new object[] { true });
            Range.GetType().InvokeMember("HorizontalAlignment", BindingFlags.SetProperty, null, Range, args);
        }

        //УСТАНОВИТЬ ОРИЕНТАЦИЮ СТРАНИЦЫ 
        //1 - КНИЖНЫЙ
        //2 - АЛЬБОМНЫЙ
        public void SetOrientation(int Orientation)
        {
            //Range.Interior.ColorIndex
            object PageSetup = WorkSheet.GetType().InvokeMember("PageSetup", BindingFlags.GetProperty,
                null, WorkSheet, null);

            PageSetup.GetType().InvokeMember("Orientation", BindingFlags.SetProperty,
                null, PageSetup, new object[] { Orientation });
        }

        //УСТАНОВИТЬ ШИРИНУ СТОЛБЦОВ
        public void SetColumnWidth(string range, double Width)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            object[] args = new object[] { Width };
            Range.GetType().InvokeMember("ColumnWidth", BindingFlags.SetProperty, null, Range, args);
        }
        
        //УСТАНОВИТЬ ВЫСОТУ СТРОК
        public void SetRowHeight(string range, double Height)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            object[] args = new object[] { Height };
            Range.GetType().InvokeMember("RowHeight", BindingFlags.SetProperty, null, Range, args);
        }

        //УСТАНОВИТЬ ВИД РАМКИ ВОКРУГ ЯЧЕЙКИ
        public void SetBorderStyle(string range, int Style)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            object[] args = new object[] { 1 };
            object[] args1 = new object[] { 1 };
            object Borders = Range.GetType().InvokeMember("Borders", BindingFlags.GetProperty, null, Range, null);
            Borders = Range.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null, Borders, args);
        } 

        //ЧТЕНИЕ ДАННЫХ ИЗ ВЫБРАННОЙ ЯЧЕЙКИ
        public string GetValue(string range)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            return Range.GetType().InvokeMember("Value", BindingFlags.GetProperty,
                null, Range, null).ToString();
        }

        //УСТАНОВИТЬ ВЫРАВНИВАНИЕ В ЯЧЕЙКЕ ПО ВЕРТИКАЛИ
        public void SetVerticalAlignment(string range, int Alignment)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            object[] args = new object[] { Alignment };
            Range.GetType().InvokeMember("VerticalAlignment", BindingFlags.SetProperty, null, Range, args);
        }

        //УСТАНОВИТЬ ВЫРАВНИВАНИЕ В ЯЧЕЙКЕ ПО ГОРИЗОНТАЛИ
        public void SetHorisontalAlignment(string range, int Alignment)
        {
            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
            object[] args = new object[] { Alignment };
            Range.GetType().InvokeMember("HorizontalAlignment", BindingFlags.SetProperty, null, Range, args);
        }
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35694645
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35695171
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классу не помешало бы заимплементить IDisposable соответствующим образом...

Первым делом мы испортим самолёты.
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35696499
cho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cho
Гость
Как по мне, так лучше курить XML->XSLT...
Формирование происходит на порядок быстрее... Да и гемороиться только с файлом XSL...
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35698767
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
choКак по мне, так лучше курить XML->XSLT...
Формирование происходит на порядок быстрее... Да и гемороиться только с файлом XSL...
Тогда приведи примеры, как это делать также просто, как и с помощью кода, приведенного выше.
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35699888
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё есть порт APACHE POI на микрософтовскую джаву под дотнетом
Там идёт редактирование файлов вообще без каких либо ОЛЕ
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35699915
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeusTheTrueGodна микрософтовскую джаву под дотнетом
Это речь про J#? Штука из разряда "родила царица в ночь не то сына, не то дочь". Как никто из мох знакомых джавовцев ее не использует (используют родную, sun'овскую), так никто из знакомых дотнентчиков ее не использует. Зачем нужно такое чудо природы - загадка.
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35700196
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на Apache.org есть проект POI, написанный на джаве, который позволяет напрямую работать с документами ворда и экселя(в их оригинальном формате, на в xml) без самого этого экселя или ворда, и проект написан на джаве
Если хочется вызывать его из дот нета, то можно найти порт этого проекта на джаву от микрософта
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35700238
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ъй,

чудо природы было задумано для "облегчения перехода" с Java на c#
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35700258
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЪй,

чудо природы было задумано для "облегчения перехода" с Java на c#
вот именно, что "облегчения перехода" в кавычках
я перешел без особенных проблем и концептуальных вопросов за 2 недели: неделя чтения документации+неделя тестовых проектиков - потом пошел боевой код
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35700840
.AleXo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько мне известно в этой теме выкладываем функции а не обсуждаем...
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35701171
МСУ фбане
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.AleXoНасколько мне известно в этой теме выкладываем функции а не обсуждаем...
Т.е., всем заткнуться и курить Ваш зловещий код?
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35701941
new_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опробовал код! Всё супер пупер кроме одного, процесс exс`ля не выходит(не закрывается!!!!!!!!!).
Код: plaintext
1.
2.
3.
4.
5.
6.
Excel ex = new Excel();
ex.NewDocument();
ex.SetValue("A1", "Hi!");
ex.SetValue("B1", "Document");
ex.SaveDocument(Application.StartupPath + "\\Doc.xls");
ex.CloseDocument();
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35702344
new_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ещё баг!
Код: plaintext
1.
2.
3.
4.
5.
Excel doc = new Excel();
doc.OpenDocument(Application.StartupPath + "\\Doc.xls");
textBox1.Text = doc.GetValue("A1");
textBox2.Text = doc.GetValue("B2");
doc.CloseDocument();
при использовании этого кода, прога вылетает в этом месте!???!!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public string GetValue(string range)
{
    Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty,
                null, WorkSheet, new object[] { range });
    return Range.GetType().InvokeMember("Value", BindingFlags.GetProperty,
                null, Range, null).ToString();
}

"В экземпляре объекта не задана ссылка на объект."
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35702429
new_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
упс! сорри! мой касяк!
Код: plaintext
1.
textBox2.Text = doc.GetValue("B1");
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35708922
.AleXo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первый релиз класса. Все дружно тестируем... :)
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709005
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно как то вместо указание ячейки типа


ex.SetValue("A1", "Hi!");


указывать строку колонку

перегрузить ex.SetValue("row:col", "Hi!");

и GetValue() точно так же
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709061
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что выложил коллега .AleXo не читал, но, если в за основу был взят класс по приведенной мною ссылке, то я его дорабатывал так:
Код: plaintext
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.
		public Range this [ string sRange ]
		{
			get { return new Range ( Get ( "Range", new object [ ] { sRange } ) ); }
		}

		public Range Cell ( int Left, int Top ) { return this [ string.Format ( "{0}{1}", ParseColNum ( Left ), ( Top + 1 ).ToString ( ) ) ]; }
		public Range Column ( int Left ) { return this [ string.Format ( "{0}:{0}", ParseColNum ( Left ) ) ]; }
		public Range Row ( int Top ) { return this [ string.Format ( "{0}:{0}", ( Top + 1 ).ToString ( ) ) ]; }
		public Range Region ( int Left, int Top, int Right, int Bottom )
		{
			return this [ string.Format ( "{0}{1}:{2}{3}",
				ParseColNum ( Left ), ( Top + 1 ).ToString ( ),
				ParseColNum ( Right ), ( Bottom + 1 ).ToString ( ) ) ];
		}

		/// <summary>
		/// Переводит порядковый номер столбца в его буквенный эквивалент.
		/// </summary>
		public static string ParseColNum ( int ColNum )
		{
			StringBuilder sb = new StringBuilder ( );
			
			if ( ColNum <= 0 )  return "A";

			while ( ColNum != 0 )
			{
				sb.Append ( ( char ) ( 'A' + ( ColNum % 26 ) ) );
				ColNum /= 26;
			}

			return sb.ToString ( );
		}
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709339
немой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.AleXo
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
          //ВИДИМОСТЬ EXCEL - СВОЙСТВО КЛАССА
        public bool Visible
        {
            set
            {
                if (false == value)
                    oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
                        null, oExcel, new object[] { false });

                else
                    oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
                        null, oExcel, new object[] { true });
            }
        }


А смысл нагромождения?
может проще?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 public bool Visible
        {
            set
            {
                    oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
                        null, oExcel, new object[] { value });
            }
        }
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709381
.AleXo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немой,

тоже вариант :)
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709445
А я в детстве вообще говорил - кукументы
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709690
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот не пойму я - чего тут придумывать? Обычный late binding, тема перетиралась уже сто раз. Если нужно что-то новое - записываем макрос, смотрим его, и реализуем нужный метод по аналогии. Просто кодинг.

Первым делом мы испортим самолёты.
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35709865
.AleXo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если уж этот класс никому не нужен, ладно, тогда тему можно закрыть.
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35710375
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.AleXoНу если уж этот класс никому не нужен, ладно, тогда тему можно закрыть.


Класс нужен и интересно !! Автору респект и уважуха.

ЗЫ.

Еще бы групировку осветили, ваабще бы классно было
...
Рейтинг: 0 / 0
Функции для работы с Excel из C#
    #35710626
.AleXo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey1306,

пострараюсь сделать группировку
...
Рейтинг: 0 / 0
25 сообщений из 509, страница 1 из 21
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Функции для работы с Excel из C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]