Андрейка2020
Client
- Регистрация
- 26.05.2020
- Сообщения
- 495
- Благодарностей
- 172
- Баллы
- 43
Где взять dll-файл? Я так понимаю, там на гите не скомпилированная библиотека?
Благодарю! Это свежак или какая-то старая версия? Насколько критична версия библиотеки?По ссылке EPPlus.dllEPPlus.dll - Google Диск
drive.google.com
Всю необходимую информацию вы можете получить на сайте разработчика https://www.nuget.org/packages/EPPlus/Благодарю! Это свежак или какая-то старая версия? Насколько критична версия библиотеки?
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // мы используем его в некоммерческих целях)))
using(var package = new ExcelPackage(new FileInfo("MyWorkbook.xlsx")))
{
}
FileInfo file = new FileInfo(@"D:\ZennoPoster\Настройки.xlsx"); // Указываем путь к файлу
using (ExcelPackage package = new ExcelPackage(file))
{
ExcelWorksheet worksheet1 = package.Workbook.Worksheets.Add("1");
worksheet1.Cells[1, 1].Value = "Зеннопостер"; // Добавляем в ячейку [1;1] текст
worksheet1.Cells[1, 1].Style.Font.Bold = true; // Выделяем жирным
package.Save(); // Сохраняем Книгу
}
А есть возможность записи ячейки не в новую страницу, а в готовую (с данным)?Обработка уже готовой страницы:FileInfo file = new FileInfo(@"D:\ZennoPoster\Настройки.xlsx"); // Указываем путь к файлу using (ExcelPackage package = new ExcelPackage(file)) { ExcelWorksheet worksheet1 = package.Workbook.Worksheets.Add("1"); worksheet1.Cells[1, 1].Value = "Зеннопостер"; // Добавляем в ячейку [1;1] текст worksheet1.Cells[1, 1].Style.Font.Bold = true; // Выделяем жирным package.Save(); // Сохраняем Книгу }
Данный код работает когда страницы "1" нет. Если же она создана и в ней записаны какие-либо данные, код выходит по красной ветке
FileInfo file = new FileInfo(project.Directory + @"\Template.xlsx"); // Указываем путь к файлу
using (ExcelPackage package = new ExcelPackage(file))
{
var worksheet = package.Workbook.Worksheets ["1"]; // Задаем переменную, указывающую на лист, с которым работаем
int rowCount = worksheet.Dimension.End.Row; // Получаем количество строк
int colCount = worksheet.Dimension.End.Column; // Получаем количество столбцов
for (int row = 1; row <= rowCount; row++) {
for (int col = 1; col <= colCount; col++) {
worksheet.Cells[row,col].Value = null; // Чистим лист
}
}
worksheet.Cells[1,1].Value = "Зеннопостер"; // Задаем новые значения
package.Save(); // Сохраняем Книгу
}
СпасибоПоизучал ветку с комментариями и собрал из предложенных вариантов решение для Вашего вопроса.C#:FileInfo file = new FileInfo(project.Directory + @"\Template.xlsx"); // Указываем путь к файлу using (ExcelPackage package = new ExcelPackage(file)) { var worksheet = package.Workbook.Worksheets ["1"]; // Задаем переменную, указывающую на лист, с которым работаем int rowCount = worksheet.Dimension.End.Row; // Получаем количество строк int colCount = worksheet.Dimension.End.Column; // Получаем количество столбцов for (int row = 1; row <= rowCount; row++) { for (int col = 1; col <= colCount; col++) { worksheet.Cells[row,col].Value = null; // Чистим лист } } worksheet.Cells[1,1].Value = "Зеннопостер"; // Задаем новые значения package.Save(); // Сохраняем Книгу }
Не совсем понятен вопрос (экстрасенсы подсказывают: нужен готовый сниппет). Опишите, пожалуйста, конечную цель - я попробую разобраться.Спасибо
А можно вместо статического значения, указать строку/столбец из переменной: worksheet.Cells[1,1].Value?
Не совсем понятен вопрос (экстрасенсы подсказывают: нужен готовый сниппет). Опишите, пожалуйста, конечную цель - я попробую разобарться.
FileInfo file = new FileInfo(project.Directory + @"\Template.xlsx"); // Указываем путь к файлу
using (ExcelPackage package = new ExcelPackage(file))
{
var worksheet = package.Workbook.Worksheets ["1"]; // Задаем переменную, указывающую на лист, с которым работаем
int rowCount = worksheet.Dimension.End.Row; // Получаем количество строк
int colCount = worksheet.Dimension.End.Column; // Получаем количество столбцов
for (int row = 1; row <= rowCount; row++) {
for (int col = 1; col <= colCount; col++) {
worksheet.Cells[row,col].Value = null; // Чистим лист
}
}
worksheet.Cells[1,1].Value = "Зеннопостер"; // Задаем новые значения
package.Save(); // Сохраняем Книгу
}
worksheet.Cells[1, project.Variables["c"].Value].Value = "Зеннпостер"; // Задаем новые значения
Вставить текст "Зеннопостер" не в [1,1], а в [1, variable], где variable - переменная из проекта. Попробовал "Указать значение из переменной", но бьет ошибку:
worksheet.Cells[1, project.Variables["c"].Value].Value = "Зеннпостер"; // Задаем новые значения
int stroka = Convert.ToInt32(project.Variables["row"].Value); // Задаем переменную строки
int stolbec = Convert.ToInt32(project.Variables["col"].Value); // Задаем переменную столбца
worksheet.Cells[stroka,stolbec].Value = "Зеннопостер"; // Задаем новые значения
Вчера почти дошел до этого решения (предварительная запись значения переменной из проекта в переменную кода), но без этой фичи: Convert.ToInt32C#:int stroka = Convert.ToInt32(project.Variables["row"].Value); // Задаем переменную строки int stolbec = Convert.ToInt32(project.Variables["col"].Value); // Задаем переменную столбца worksheet.Cells[stroka,stolbec].Value = "Зеннопостер"; // Задаем новые значения
FileInfo file = new FileInfo(project.Directory + @"\Настройки.xlsx"); // Указываем путь к файлу
using (ExcelPackage package = new ExcelPackage(file))
{
var worksheet = package.Workbook.Worksheets ["65.108.110.249"]; // Задаем переменную, указывающую на лист, с которым работаем
int stolbec = Convert.ToInt32(project.Variables["column"].Value ); // Задаем переменную столбца
int stroka = Convert.ToInt32(project.Variables["string"].Value); // Задаем переменную строки
worksheet.Cells[1,stolbec+1].Value = project.Variables["date"].Value; // Задаем новые значения
worksheet.Cells[1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным
worksheet.Cells[stroka+1,stolbec+1].Value = project.Variables["sum"].Value; // Задаем новые значения
worksheet.Cells[stroka+1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным
package.Save(); // Сохраняем Книгу
}
Перестал работать данный код несколько дней назад. Вообще ничего не менял в кубике C# и шаблоне, в котором он используется, поэтому и нет догадок с чем это может быть связано. Используется "EPPlus" и директивы Using:
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.IO;
В логе такое сообщение: "Выполнение действия CSharp OwnCode: Дата + Сумма. Данный ключ отсутствует в словаре."
Если нет решения, то мб мысли где искать источник проблемы? Потому что, повторюсь, код рабочий (по крайне мере был) и в нем ничего не менялось.Запись даты и суммы:FileInfo file = new FileInfo(project.Directory + @"\Настройки.xlsx"); // Указываем путь к файлу using (ExcelPackage package = new ExcelPackage(file)) { var worksheet = package.Workbook.Worksheets ["65.108.110.249"]; // Задаем переменную, указывающую на лист, с которым работаем int stolbec = Convert.ToInt32(project.Variables["column"].Value ); // Задаем переменную столбца int stroka = Convert.ToInt32(project.Variables["string"].Value); // Задаем переменную строки worksheet.Cells[1,stolbec+1].Value = project.Variables["date"].Value; // Задаем новые значения worksheet.Cells[1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным worksheet.Cells[stroka+1,stolbec+1].Value = project.Variables["sum"].Value; // Задаем новые значения worksheet.Cells[stroka+1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным package.Save(); // Сохраняем Книгу }
Посмотри пожалуйста скрин: тут код, текст ошибки и значения переменныхЯ проверил, код рабочий. Ищите источник проблемы в другой части алгоритма. По крайней мере, я сделал все именно как у вас изложено с чистого листа - проблема не в этом коде.
Первая сложность заключается в том, что в Excel-файле не существует вкладки с указанным именем. Для того, чтобы к ней обратиться, предлагаю ее сначала обнаружить, создать при необходимости и далее работать с ней как обычно.Посмотри пожалуйста скрин: тут код, текст ошибки и значения переменных
У меня пакет Microsoft 2007 года, мб слишком старый?
var sheetName = "65.108.110.249"; // Обозначаем имя для вкладки
var checkSheet = package.Workbook.Worksheets.Any(sheet => sheet.Name == sheetName); // Ищем вкладку в файле по обозначенному имени
if (!Convert.ToBoolean(checkSheet)) // Если вкладки нет, то создаем ее
{
ExcelWorksheet ws1 = package.Workbook.Worksheets.Add(sheetName);
}
var worksheet = package.Workbook.Worksheets [sheetName]; // Обращаемся к созданной или распознанной вкладке
dynamic rowCount;
dynamic colCount;
try // Пробуем распознать и записать в динамические переменные количество строк и столбцов
{
rowCount = worksheet.Dimension.End.Row; // Получаем количество строк
colCount = worksheet.Dimension.End.Column; // Получаем количество столбцов
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
worksheet.Cells[row,col].Value = null; // Чистим лист
}
}
}
catch {} // Исключение, если распознать не удалось (ну и ладно)
int stolbec = Convert.ToInt32(project.Variables["column"].Value ); // Задаем переменную столбца
int stroka = Convert.ToInt32(project.Variables["string"].Value); // Задаем переменную строки
worksheet.Cells[1,stolbec+1].Value = project.Variables["date"].Value; // Задаем новые значения
worksheet.Cells[1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным
worksheet.Cells[stroka+1,stolbec+1].Value = project.Variables["sum"].Value; // Задаем новые значения
worksheet.Cells[stroka+1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным
package.Save(); // Сохраняем Книгу
Спасибо за оптимизацию большое. Если интересно (а кому то мб и полезно) - нельзя использовать гиперссылки в файле. Именно из-за этого код не срабатывал у меня.Первая сложность заключается в том, что в Excel-файле не существует вкладки с указанным именем. Для того, чтобы к ней обратиться, предлагаю ее сначала обнаружить, создать при необходимости и далее работать с ней как обычно.
Попытка посчитать количество строк и столбцов в ней у меня не удалась из-за аналогичной ошибки. Исходя из этого я сделал вывод, что созданная пустая вкладка не может быть распознана конструкцией for {} - эту проблему удалось решить следующим образом:C#:var sheetName = "65.108.110.249"; // Обозначаем имя для вкладки var checkSheet = package.Workbook.Worksheets.Any(sheet => sheet.Name == sheetName); // Ищем вкладку в файле по обозначенному имени if (!Convert.ToBoolean(checkSheet)) // Если вкладки нет, то создаем ее { ExcelWorksheet ws1 = package.Workbook.Worksheets.Add(sheetName); }
Два куска кода в моем кубике идут сразу друг за другом, а далее - запись значений и сохранение книги.C#:var worksheet = package.Workbook.Worksheets [sheetName]; // Обращаемся к созданной или распознанной вкладке dynamic rowCount; dynamic colCount; try // Пробуем распознать и записать в динамические переменные количество строк и столбцов { rowCount = worksheet.Dimension.End.Row; // Получаем количество строк colCount = worksheet.Dimension.End.Column; // Получаем количество столбцов for (int row = 1; row <= rowCount; row++) { for (int col = 1; col <= colCount; col++) { worksheet.Cells[row,col].Value = null; // Чистим лист } } } catch {} // Исключение, если распознать не удалось (ну и ладно)
Рекомендую адаптировать всю конструкцию, пригодится.C#:int stolbec = Convert.ToInt32(project.Variables["column"].Value ); // Задаем переменную столбца int stroka = Convert.ToInt32(project.Variables["string"].Value); // Задаем переменную строки worksheet.Cells[1,stolbec+1].Value = project.Variables["date"].Value; // Задаем новые значения worksheet.Cells[1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным worksheet.Cells[stroka+1,stolbec+1].Value = project.Variables["sum"].Value; // Задаем новые значения worksheet.Cells[stroka+1,stolbec+1].Style.Font.Bold = true; // Выделяем жирным package.Save(); // Сохраняем Книгу