Несколько листов в формате xls

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Уважаемые разработчики)
Если будет время и возможность, подумайте над возможностью реализации работы с несколькими вкладками для таблиц экселя.
Так муторно каждый раз код писать(((
 

Baramon

Client
Регистрация
15.07.2011
Сообщения
316
Благодарностей
31
Баллы
28
поделитесь кодом для работы с несколькими вкладками
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
ооо его надо накропать еще, постараюсь в тяпницу или субботу накропать, ибо спать очень хочется)
 
  • Спасибо
Реакции: Baramon

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Ну в общем как и обещал накидал костячок для работы с несколькими листами в Excel.
Для того чтобы код работал надо подключить сборку Microsoft.Office.Interop.Excel

Код:
//Создаем приложение
Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;

//Создаем новую книгу
ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);

//Или открываем существующий фаил
//    ObjWorkBook=ObjExcel.Workbooks.Open(@"C:\a1.xls",
//    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);

//Таблица.
ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[2]; //выбираем номер листа
//Пишем данные в ячейки. Ячейка 1,1 это А1. Ячейки 0,0 не существует.
//Значения [y - строка,x - столбец]
ObjWorkSheet.Cells[4, 1] = "мама"; 
ObjWorkSheet.Cells[4, 2] = "мыла";
ObjWorkSheet.Cells[4, 3] = "раму";
//считываем данные из ячейки. Хз почему но по человечески сделать не получилось))) поэтому читаем через ж...
Microsoft.Office.Interop.Excel.Range cellrange = (Microsoft.Office.Interop.Excel.Range) ObjWorkSheet.Cells[4, 1];
if(cellrange.Value2!=null) //а то будет ошибка вылетать, если в ячейке нет ничего
{
System.Windows.Forms.MessageBox.Show(cellrange.Value2.ToString());
}

//Делаем видимым приложение
ObjExcel.Visible = true;
ObjExcel.UserControl = true;

//Сохраняем все что мы там нахеровертили если открывали существующий фаил
//ObjExcel.DisplayAlerts = false;  //нечего наше высочество окошками о перезаписи отвлекать
//ObjWorkBook.Save();

//Сохраняем все что мы там нахеровертили если создали новый фаил
ObjExcel.DisplayAlerts = false;  //нечего наше высочество окошками о перезаписи отвлекать
ObjWorkBook.SaveAs(@"C:\a2.xls",  //object Filename
Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,                        //object FileFormat
Type.Missing,                       //object Password 
Type.Missing,                       //object WriteResPassword  
Type.Missing,                       //object ReadOnlyRecommended
Type.Missing,                       //object CreateBackup
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,//XlSaveAsAccessMode AccessMode
Type.Missing,                       //object ConflictResolution
Type.Missing,                       //object AddToMru 
Type.Missing,                       //object TextCodepage
Type.Missing,                       //object TextVisualLayout
Type.Missing);                      //object Local


//закрываем приложение
ObjExcel.Quit();;
В общем и целом - данный набор позволяет делать все то же самое что делает зеннопостер с табличками
Для тех кому хочется извращений вот ссылочки по теме)))

http://wladm.narod.ru/C_Sharp/comexcel.html
http://nullpro.info/2012/rabota-s-excel-iz-c-cherez-com-interop/
http://nullpro.info/2012/rabota-s-excel-iz-c-cherez-com-interop-chast-3-chtenie-dannyx/

В аське, скайпе поддержка не осуществляется ;-)
На форуме - по желанию)
Если что то не устраивает - Гугль в помощь.
Если есть что добавить и поправить - буду рад ибо сам не программист)))
Этого топика, имхо, на форуме очень не хватает и было бы неплохо его сделать)))
 

Вложения

Baramon

Client
Регистрация
15.07.2011
Сообщения
316
Благодарностей
31
Баллы
28
Круто что сказать
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Microsoft.Office.Interop.Excel очень косячкая хрень. Лучше заюзать либу, коих на Codeplex туева куча
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Отличный план!))))
Прикладывайте мануал, как подключить стороннюю либу к зенке и набор сниппетов для работы с экселем) я с удовольствием почитаю, и может быть кое что утащу))) ибо мне это решение тоже не нравится.
 

bigcajones

Client
Регистрация
09.02.2011
Сообщения
1 216
Благодарностей
683
Баллы
113
Код:
http://www.gemboxsoftware.com/
 
  • Спасибо
Реакции: Lexicon

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
да... и стоит тоже не кисло)))) 500 баксов я не готов платить ради упрощения работы с экселем))) я лучше как нибудь на стандартных библиотеках)
 

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 645
Благодарностей
2 516
Баллы
113
Добавим в TODO но с маленьким приоритетом и можно будет только через C# снипеты обращаться к этим листам.
Для Microsoft.Office.Interop.Excel нужно установить Excel, что подходит далеко не всем.
 
  • Спасибо
Реакции: phoenixs и bigcajones

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Ну))) что было в гугле из того и слепил) но было бы очень замечательно)
Спасибо!
 
  • Спасибо
Реакции: Sotastroy

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 553
Баллы
113
Добавим в TODO но с маленьким приоритетом и можно будет только через C# снипеты обращаться к этим листам.
Для Microsoft.Office.Interop.Excel нужно установить Excel, что подходит далеко не всем.
Есть какие-нибудь подвижки в этом направлении, если не секрет? :-)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Насколько мне известно - на форуме появилось много примеров более аккуратного и простого кода на сторонних библиотеках через шарп)))))
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 553
Баллы
113
Насколько мне известно - на форуме появилось много примеров более аккуратного и простого кода на сторонних библиотеках через шарп)))))
Не поделитесь ссылочкой, где можно ознакомиться с этим решением? :-)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Блин надо искать по форуму, но натыкался раз 10))
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 553
Баллы
113
Я только на эту тему наткнулся :(
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Насколько мне известно - на форуме появилось много примеров более аккуратного и простого кода на сторонних библиотеках через шарп)))))
я тоже не нашел) помню что было)
 
  • Спасибо
Реакции: Lexicon

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 553
Баллы
113
  • Спасибо
Реакции: ParadoxRU и Lexicon

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Да) похоже на то) но их точно было несколько))))
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 553
Баллы
113
Блин, все обыскал, но нашел только эту :bl:
По поводу ссылки выше, вроде как разобрался как сделать обращение к определенному листу Excel, но не понял, как положить все эти данные в таблицу разом, а не конкретную ячейку.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
113
Ну в общем как и обещал накидал костячок для работы с несколькими листами в Excel.
Для того чтобы код работал надо подключить сборку Microsoft.Office.Interop.Excel

Код:
//Создаем приложение
Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;

//Создаем новую книгу
ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);

//Или открываем существующий фаил
//    ObjWorkBook=ObjExcel.Workbooks.Open(@"C:\a1.xls",
//    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);

//Таблица.
ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[2]; //выбираем номер листа
//Пишем данные в ячейки. Ячейка 1,1 это А1. Ячейки 0,0 не существует.
//Значения [y - строка,x - столбец]
ObjWorkSheet.Cells[4, 1] = "мама";
ObjWorkSheet.Cells[4, 2] = "мыла";
ObjWorkSheet.Cells[4, 3] = "раму";
//считываем данные из ячейки. Хз почему но по человечески сделать не получилось))) поэтому читаем через ж...
Microsoft.Office.Interop.Excel.Range cellrange = (Microsoft.Office.Interop.Excel.Range) ObjWorkSheet.Cells[4, 1];
if(cellrange.Value2!=null) //а то будет ошибка вылетать, если в ячейке нет ничего
{
System.Windows.Forms.MessageBox.Show(cellrange.Value2.ToString());
}

//Делаем видимым приложение
ObjExcel.Visible = true;
ObjExcel.UserControl = true;

//Сохраняем все что мы там нахеровертили если открывали существующий фаил
//ObjExcel.DisplayAlerts = false;  //нечего наше высочество окошками о перезаписи отвлекать
//ObjWorkBook.Save();

//Сохраняем все что мы там нахеровертили если создали новый фаил
ObjExcel.DisplayAlerts = false;  //нечего наше высочество окошками о перезаписи отвлекать
ObjWorkBook.SaveAs(@"C:\a2.xls",  //object Filename
Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,                        //object FileFormat
Type.Missing,                       //object Password
Type.Missing,                       //object WriteResPassword
Type.Missing,                       //object ReadOnlyRecommended
Type.Missing,                       //object CreateBackup
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,//XlSaveAsAccessMode AccessMode
Type.Missing,                       //object ConflictResolution
Type.Missing,                       //object AddToMru
Type.Missing,                       //object TextCodepage
Type.Missing,                       //object TextVisualLayout
Type.Missing);                      //object Local


//закрываем приложение
ObjExcel.Quit();;
В общем и целом - данный набор позволяет делать все то же самое что делает зеннопостер с табличками
Для тех кому хочется извращений вот ссылочки по теме)))

http://wladm.narod.ru/C_Sharp/comexcel.html
http://nullpro.info/2012/rabota-s-excel-iz-c-cherez-com-interop/
http://nullpro.info/2012/rabota-s-excel-iz-c-cherez-com-interop-chast-3-chtenie-dannyx/

В аське, скайпе поддержка не осуществляется ;-)
На форуме - по желанию)
Если что то не устраивает - Гугль в помощь.
Если есть что добавить и поправить - буду рад ибо сам не программист)))
Этого топика, имхо, на форуме очень не хватает и было бы неплохо его сделать)))
Тоже встал перед задачей: есть файл XLSX с несколькими листами. Мне по ним надо поиск текста определенного делать.
Для удобства оптимально было бы каждый лист прикрепить к отдельной зенно-таблице, и по ней уже стандартными командами поиска по строках\ячейках пройтись. Но как это сделать?
Шаблон из этого поста НЕ открывается (ProjectMaker тупо ничего не показывает после его открытия), он под какую-то древнюю зенку сделан?

Альтернативный костыль: делать экспорт мульти-листового XLSX в отдельные CSV-файлы через консольную утилиту. А потом каждый файл уже загружать в зенку как таблицу и проводить поиск. Есть решения поумнее?
 
  • Спасибо
Реакции: Radzhab

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
Тоже встал перед задачей: есть файл XLSX с несколькими листами. Мне по ним надо поиск текста определенного делать.
Для удобства оптимально было бы каждый лист прикрепить к отдельной зенно-таблице, и по ней уже стандартными командами поиска по строках\ячейках пройтись. Но как это сделать?
Шаблон из этого поста НЕ открывается (ProjectMaker тупо ничего не показывает после его открытия), он под какую-то древнюю зенку сделан?

Альтернативный костыль: делать экспорт мульти-листового XLSX в отдельные CSV-файлы через консольную утилиту. А потом каждый файл уже загружать в зенку как таблицу и проводить поиск. Есть решения поумнее?
Есть неплохая библиотека ClosedXML, https://github.com/ClosedXML/ClosedXML

Кусок кода с проекта
Код:
using ClosedXML.Excel;

                XLWorkbook excel1 = new XLWorkbook(@"D:\22.xlsx);
                var ws = excel1.Worksheet(1); // 1 - номер листа в Excel
                var firstCell = ws.FirstCellUsed();
                var lastCell = ws.LastCellUsed();
                var range = ws.Range(firstCell.Address, lastCell.CellRight().Address);
                var companyTable = range.AsTable();
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)