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

Где взять dll-файл? Я так понимаю, там на гите не скомпилированная библиотека?
 
  • Спасибо
Реакции: Андрейка2020
В новой версии нужно вставлять след. код, чтобы заработало
C#:
Развернуть Свернуть Копировать
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(); // Сохраняем Книгу
}

А есть возможность записи ячейки не в новую страницу, а в готовую (с данным)?
Данный код работает когда страницы "1" нет. Если же она создана и в ней записаны какие-либо данные, код выходит по красной ветке
 
Последнее редактирование:
Обработка уже готовой страницы:
Развернуть Свернуть Копировать
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
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?
 
Спасибо

А можно вместо статического значения, указать строку/столбец из переменной: worksheet.Cells[1,1].Value?

Не совсем понятен вопрос (экстрасенсы подсказывают: нужен готовый сниппет). Опишите, пожалуйста, конечную цель - я попробую разобраться.
 
Последнее редактирование:
  • Спасибо
Реакции: u$er
Не совсем понятен вопрос (экстрасенсы подсказывают: нужен готовый сниппет). Опишите, пожалуйста, конечную цель - я попробую разобарться.
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 = "Зеннпостер"; // Задаем новые значения
 
Вставить текст "Зеннопостер" не в [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
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:
 
Перестал работать данный код несколько дней назад. Вообще ничего не менял в кубике 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(); // Сохраняем Книгу
}
Если нет решения, то мб мысли где искать источник проблемы? Потому что, повторюсь, код рабочий (по крайне мере был) и в нем ничего не менялось.
 
Перестал работать данный код несколько дней назад. Вообще ничего не менял в кубике 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
Я проверил, код рабочий. Ищите источник проблемы в другой части алгоритма. По крайней мере, я сделал все именно как у вас изложено с чистого листа - проблема не в этом коде.
Посмотри пожалуйста скрин: тут код, текст ошибки и значения переменных
У меня пакет Microsoft 2007 года, мб слишком старый?
 

Вложения

  • форум.jpg
    форум.jpg
    246,6 KB · Просмотры: 223
Посмотри пожалуйста скрин: тут код, текст ошибки и значения переменных
У меня пакет 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
Первая сложность заключается в том, что в 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(); // Сохраняем Книгу

Рекомендую адаптировать всю конструкцию, пригодится.
Спасибо за оптимизацию большое. Если интересно (а кому то мб и полезно) - нельзя использовать гиперссылки в файле. Именно из-за этого код не срабатывал у меня.
 
Подскажите снипет, чтобы просто прочитать/скопировать листы таблицы в уже созданные таблицы зенно.
 

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