Создание Excel файлов

Регистрация
26.05.2020
Сообщения
460
Благодарностей
164
Баллы
43
Где взять dll-файл? Я так понимаю, там на гите не скомпилированная библиотека?
 

phoenixs

Client
Регистрация
10.06.2020
Сообщения
158
Благодарностей
209
Баллы
43
Регистрация
26.05.2020
Сообщения
460
Благодарностей
164
Баллы
43

phoenixs

Client
Регистрация
10.06.2020
Сообщения
158
Благодарностей
209
Баллы
43
  • Спасибо
Реакции: Андрейка2020

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
В новой версии нужно вставлять след. код, чтобы заработало
C#:
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;   // мы используем его в некоммерческих целях)))
   
using(var package = new ExcelPackage(new FileInfo("MyWorkbook.xlsx")))
{

}
 

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
Обработка уже готовой страницы:
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" нет. Если же она создана и в ней записаны какие-либо данные, код выходит по красной ветке
 
Последнее редактирование:

fridayman

Client
Регистрация
25.03.2018
Сообщения
167
Благодарностей
259
Баллы
63
Обработка уже готовой страницы:
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" нет. Если же она создана и в ней записаны какие-либо данные, код выходит по красной ветке
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(); // Сохраняем Книгу
}
Поизучал ветку с комментариями и собрал из предложенных вариантов решение для Вашего вопроса.
 
  • Спасибо
Реакции: u$er

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
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?
 

fridayman

Client
Регистрация
25.03.2018
Сообщения
167
Благодарностей
259
Баллы
63
Спасибо

А можно вместо статического значения, указать строку/столбец из переменной: worksheet.Cells[1,1].Value?
Не совсем понятен вопрос (экстрасенсы подсказывают: нужен готовый сниппет). Опишите, пожалуйста, конечную цель - я попробую разобраться.
 
Последнее редактирование:
  • Спасибо
Реакции: u$er

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
Не совсем понятен вопрос (экстрасенсы подсказывают: нужен готовый сниппет). Опишите, пожалуйста, конечную цель - я попробую разобарться.
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(); // Сохраняем Книгу
}
Вставить текст "Зеннопостер" не в [1,1], а в [1, variable], где variable - переменная из проекта. Попробовал "Указать значение из переменной", но бьет ошибку:
worksheet.Cells[1, project.Variables["c"].Value].Value = "Зеннпостер"; // Задаем новые значения
 

fridayman

Client
Регистрация
25.03.2018
Сообщения
167
Благодарностей
259
Баллы
63
Вставить текст "Зеннопостер" не в [1,1], а в [1, variable], где variable - переменная из проекта. Попробовал "Указать значение из переменной", но бьет ошибку:
worksheet.Cells[1, project.Variables["c"].Value].Value = "Зеннпостер"; // Задаем новые значения
C#:
int stroka = Convert.ToInt32(project.Variables["row"].Value); // Задаем переменную строки
int stolbec = Convert.ToInt32(project.Variables["col"].Value); // Задаем переменную столбца
worksheet.Cells[stroka,stolbec].Value = "Зеннопостер"; // Задаем новые значения
 
  • Спасибо
Реакции: twisterrr и u$er

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
C#:
int stroka = Convert.ToInt32(project.Variables["row"].Value); // Задаем переменную строки
int stolbec = Convert.ToInt32(project.Variables["col"].Value); // Задаем переменную столбца
worksheet.Cells[stroka,stolbec].Value = "Зеннопостер"; // Задаем новые значения
Вчера почти дошел до этого решения (предварительная запись значения переменной из проекта в переменную кода), но без этой фичи: Convert.ToInt32
Спасибо большое, работает:ah:
 

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
Перестал работать данный код несколько дней назад. Вообще ничего не менял в кубике 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(); // Сохраняем Книгу
}
Если нет решения, то мб мысли где искать источник проблемы? Потому что, повторюсь, код рабочий (по крайне мере был) и в нем ничего не менялось.
 

fridayman

Client
Регистрация
25.03.2018
Сообщения
167
Благодарностей
259
Баллы
63
Перестал работать данный код несколько дней назад. Вообще ничего не менял в кубике 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(); // Сохраняем Книгу
}
Если нет решения, то мб мысли где искать источник проблемы? Потому что, повторюсь, код рабочий (по крайне мере был) и в нем ничего не менялось.

Я проверил, код рабочий. Ищите источник проблемы в другой части алгоритма. По крайней мере, я сделал все именно как у вас изложено с чистого листа - проблема не в этом коде.
 
Последнее редактирование:
  • Спасибо
Реакции: u$er

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
Я проверил, код рабочий. Ищите источник проблемы в другой части алгоритма. По крайней мере, я сделал все именно как у вас изложено с чистого листа - проблема не в этом коде.
Посмотри пожалуйста скрин: тут код, текст ошибки и значения переменных
У меня пакет Microsoft 2007 года, мб слишком старый?
 

Вложения

fridayman

Client
Регистрация
25.03.2018
Сообщения
167
Благодарностей
259
Баллы
63
Посмотри пожалуйста скрин: тут код, текст ошибки и значения переменных
У меня пакет Microsoft 2007 года, мб слишком старый?
Первая сложность заключается в том, что в Excel-файле не существует вкладки с указанным именем. Для того, чтобы к ней обратиться, предлагаю ее сначала обнаружить, создать при необходимости и далее работать с ней как обычно.
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);
}
Попытка посчитать количество строк и столбцов в ней у меня не удалась из-за аналогичной ошибки. Исходя из этого я сделал вывод, что созданная пустая вкладка не может быть распознана конструкцией for {} - эту проблему удалось решить следующим образом:
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(); // Сохраняем Книгу
Рекомендую адаптировать всю конструкцию, пригодится.
 
  • Спасибо
Реакции: u$er

u$er

Client
Регистрация
14.08.2021
Сообщения
19
Благодарностей
4
Баллы
3
Первая сложность заключается в том, что в Excel-файле не существует вкладки с указанным именем. Для того, чтобы к ней обратиться, предлагаю ее сначала обнаружить, создать при необходимости и далее работать с ней как обычно.
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);
}
Попытка посчитать количество строк и столбцов в ней у меня не удалась из-за аналогичной ошибки. Исходя из этого я сделал вывод, что созданная пустая вкладка не может быть распознана конструкцией for {} - эту проблему удалось решить следующим образом:
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(); // Сохраняем Книгу
Рекомендую адаптировать всю конструкцию, пригодится.
Спасибо за оптимизацию большое. Если интересно (а кому то мб и полезно) - нельзя использовать гиперссылки в файле. Именно из-за этого код не срабатывал у меня.
 

bad robot

Client
Регистрация
07.03.2011
Сообщения
177
Благодарностей
28
Баллы
28
Подскажите снипет, чтобы просто прочитать/скопировать листы таблицы в уже созданные таблицы зенно.
 

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