Вставка данных в столбцы таблицы Excel из таблицы SQL Server

#asp.net #sql-server #asp.net-mvc #excel #model-view-controller

#asp.net #sql-сервер #asp.net-mvc #excel #модель-представление-контроллер

Вопрос:

У меня есть лист Excel с семью столбцами, и два из этих столбцов пусты. У меня есть родительская таблица в SQL Server с несколькими столбцами и полными данными.

Как я могу заполнить эти два пустых столбца, взяв данные из таблицы SQL Server в ASP.NET MVC? Заранее спасибо!

Ответ №1:

Рассматривали ли вы возможность использования библиотеки C #, такой как NPOI или EPPlus, для изменения вашей таблицы Excel?

Знакомы ли вы с Entity Framework и как использовать NuGet для его установки в вашем проекте? Вы захотите использовать EF вместе с LINQ для извлечения данных из вашей таблицы SQL. Все зависит от потока вашего приложения и того, что вы хотите запустить обновление таблицы Excel, но вы, вероятно, захотите иметь метод action внутри вашего контроллера, который реагирует на взаимодействие с пользователем, а затем обращается к данным БД и записывает их на лист. Или вы просто хотите выполнить однократное извлечение и загрузку данных с SQL Server в Excel? Это будет веб-приложение или просто базовое консольное приложение?

РЕДАКТИРОВАНИЕ (пример EPPlus):

Вот простой пример, который я только что собрал, который показывает, как изменить таблицу Excel с помощью EPPlus:

     var file = new FileInfo("C:\Projects\ConsoleApplication1\test.xlsx");
    if (file.Exists)
    {
        using (ExcelPackage ep = new ExcelPackage(file))
        {
            var workSheet = ep.Workbook.Worksheets[1];
            workSheet.Cells[2, 4].Value = "test";
            ep.Save();
        }
    }
  

В этом примере я открываю файл Excel с помощью FileInfo из System.Ввод-вывод и затем, предполагая, что файл существует, создайте новый объект ExcelPackage и передайте объект FileInfo в качестве параметра. Затем я получаю доступ к первому рабочему листу и получаю доступ к ячейке во 2-й строке, 4-м столбце и устанавливаю значение «test». Наконец, я сохраняю изменения. Как вы можете видеть, это очень просто в использовании. Если вам нужны дополнительные разъяснения или расширенный пример, дайте мне знать.

Просто не забудьте включить System.Ввод-вывод и OfficeOpenXML (после установки пакета EPPlus из NuGet):

 using OfficeOpenXml;
using System.IO;
  

РЕДАКТИРОВАТЬ (руководство Entity Framework):

Предполагая, что вы не используете .NET Core, поскольку у вас уже есть существующая база данных, я рекомендую вам использовать более простой подход Database First в Entity Framework 6 для запроса и извлечения данных из вашей базы данных SQL Server. Следуйте приведенным здесь инструкциям, чтобы настроить модель данных сущности в вашем веб-приложении. После того, как вы создали файл EDMX и создали свой контроллер с вашим методом действия, вы готовы написать запрос LINQ для получения данных. Я не знаю подробностей вашей схемы БД или сколько данных вам понадобится для заполнения столбца или собирается ли пользователь вводить данные как часть запроса, поэтому немного сложно привести конкретный пример, но я могу показать вам общий пример, а затемнадеюсь, вы сможете запустить его оттуда. Вот быстрый и грязный пример, который сочетает в себе запрос к базе данных с записью данных в таблицу Excel. В этом примере я запрашиваю все синие автомобили в таблице Cars, а затем записываю марку и модель каждого автомобиля в результат, отображаемый в электронной таблице Excel (начиная с первой строки). Я увеличиваю количество строк по мере просмотра результирующего набора, и это предполагает, что марка находится в первом столбце, а модель — во 2-м столбце листа.

     var file = new FileInfo("C:\Projects\ConsoleApplication1\test.xlsx");
    if (file.Exists)
    {
        using (CarEntities dc = new CarEntities())
        {
            var carList = from c in dc.Cars
                          where c.Color == "Blue"
                          select c;

            var rowCount = 1;

            using (ExcelPackage ep = new ExcelPackage(file))
            {
                foreach (var car in carList)
                {
                    var workSheet = ep.Workbook.Worksheets[1];
                    workSheet.Cells[rowCount, 1].Value = car.Make;
                    workSheet.Cells[rowCount, 2].Value = car.Model;

                    rowCount  ;
                }

                ep.Save();
            }
        }
    }
  

Комментарии:

1. 1. это будет веб-приложение 2. Мне нужно будет создать метод действия, затем нужно получить файл Excel из локального, а затем обновить его данными с SQL server.

2. @Sribin Я только что обновил свой ответ выше, включив конкретный пример того, как использовать EPPlus для изменения вашей электронной таблицы Excel. Надеюсь, это поможет. Если вам нужна помощь в настройке Entity Framework и запросе базы данных для получения данных, дайте мне знать.

3. не могли бы вы объяснить, например, вместо «test», как я могу указывать значения с SQL server, а также отметить, что мне нужно заполнить весь столбец.

4. не могли бы вы объяснить, например, вместо «test», как я могу указывать значения с SQL server, а также отметить, что мне нужно заполнить весь столбец.

5. @Sribin добавил дополнительные рекомендации для вас выше, чтобы показать вам, как запрашивать базу данных с помощью Entity Framework, а затем записывать данные в электронную таблицу. Надеюсь, это поможет.