//Создаем приложение
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();;
Есть какие-нибудь подвижки в этом направлении, если не секрет?Добавим в TODO но с маленьким приоритетом и можно будет только через C# снипеты обращаться к этим листам.
Для Microsoft.Office.Interop.Excel нужно установить Excel, что подходит далеко не всем.
Не поделитесь ссылочкой, где можно ознакомиться с этим решением?Насколько мне известно - на форуме появилось много примеров более аккуратного и простого кода на сторонних библиотеках через шарп)))))
я тоже не нашел) помню что было)Насколько мне известно - на форуме появилось много примеров более аккуратного и простого кода на сторонних библиотеках через шарп)))))
Блин надо искать по форуму, но натыкался раз 10))
Эта?: http://zennolab.com/discussion/threads/sozdanie-excel-fajlov.15797/я тоже не нашел) помню что было)
Тоже встал перед задачей: есть файл XLSX с несколькими листами. Мне по ним надо поиск текста определенного делать.Ну в общем как и обещал накидал костячок для работы с несколькими листами в 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/
В аське, скайпе поддержка не осуществляется
На форуме - по желанию)
Если что то не устраивает - Гугль в помощь.
Если есть что добавить и поправить - буду рад ибо сам не программист)))
Этого топика, имхо, на форуме очень не хватает и было бы неплохо его сделать)))
Есть неплохая библиотека ClosedXML, https://github.com/ClosedXML/ClosedXMLТоже встал перед задачей: есть файл XLSX с несколькими листами. Мне по ним надо поиск текста определенного делать.
Для удобства оптимально было бы каждый лист прикрепить к отдельной зенно-таблице, и по ней уже стандартными командами поиска по строках\ячейках пройтись. Но как это сделать?
Шаблон из этого поста НЕ открывается (ProjectMaker тупо ничего не показывает после его открытия), он под какую-то древнюю зенку сделан?
Альтернативный костыль: делать экспорт мульти-листового XLSX в отдельные CSV-файлы через консольную утилиту. А потом каждый файл уже загружать в зенку как таблицу и проводить поиск. Есть решения поумнее?
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();