Vikrant_saini Ответов: 1

Как я могу получить имя таблицы, прежде чем таблицу в лист Excel с помощью epplus библиотека.


Я экспортирую datatable в excel с помощью библиотеки epplus в c#, но я не могу прикрепить имя таблицы или любую другую информацию в виде текста, как над таблицей в файле excel.
На самом деле мой код экспортирует 6 хранимых процедур в один лист excel, и я хочу, чтобы каждая таблица имела свое уникальное имя, как в верхней части каждой таблицы.
Спасибо за помощь.

Что я уже пробовал:

ExcelPackage package = new ExcelPackage();
           var worksheet = package.Workbook.Worksheets.Add("ExcelSheet");
           worksheet.View.ShowGridLines = false;
           int z = 1;
           for (int x = 0; x < ds.Tables.Count; x++)
           {
               var names = worksheet.Tables.Add(ds.Tables.Count, ge);
               int r = z;
               int t = r + 1;
               for (int i = 1; i < ds.Tables[x].Columns.Count + 1; i++)
               {
                   worksheet.Cells[r, i].Value = ds.Tables[x].Columns[i - 1].ToString();
               }
               for (int i = 0; i < ds.Tables[x].Rows.Count; i++)
               {
                   for (int j = 0; j < ds.Tables[x].Columns.Count; j++)
                   {
                       worksheet.Cells[i + t, j + 1].Value = ds.Tables[x].Rows[i]
                       [j].ToString();
                   }
               }
               z += ds.Tables[x].Rows.Count + 4;

Это мой epplus код.

1 Ответов

Рейтинг:
10

Karthik_Mahalingam

Небольшое изменение в решении, опубликованном ранее
Объявите название таблицы в поле DataTable как

DataTable dt = new DataTable("Table Name 1");  // declare the Table Name when creating the DataTable
 DataTable dt1 = new DataTable("Table Name 2");// declare the Table Name when creating the DataTable
DataTable dt2 = new DataTable("Table Name 3");// declare the Table Name when creating the DataTable


и обновление в ячейке, как показано ниже, обратитесь к встроенным комментариям
using (ExcelPackage package = new ExcelPackage())
            {
                ExcelWorksheet ws = package.Workbook.Worksheets.Add("Your Sheet Name");
                int rowNumber = 1;
                foreach (DataTable dtTemp in ds.Tables)
                {
                    ws.Cells["A" + rowNumber].Value = dtTemp.TableName;  // write it on top of the table 
                    ws.Cells["A" + ( rowNumber +1)].LoadFromDataTable(dtTemp, true);
                    rowNumber += dtTemp.Rows.Count + 2; // to create 2 empty rows
                }

                package.SaveAs(new FileInfo(@"D:\Projects\CPTemp\CPTemp\TextFile.xlsx"));
            }

для получения дополнительной информации см. Документация EPPLUS[^]


Vikrant_saini

Привет, пожалуйста, измените мой код.
поскольку я получаю только имя таблицы tablename Table Name 1 и в каждом первом столбце каждой таблицы, а не в верхней части таблицы.

Karthik_Mahalingam

вам придется дать разные имена каждому datatable, проверьте код, в котором вы добавляете datatable в dataset

Vikrant_saini

Да, это так. я даю разные имена таблиц для каждого datatable.
Но только получение первого имени datatable в первом столбце каждой таблицы.

Karthik_Mahalingam

опубликуйте свой код.

Vikrant_saini

используя системы.Данных.Поставщики sqlclient;
использование системы.ИО;
использование OfficeOpenXml;

общественный разделяемого класса _default : на системы.Веб.Пользовательского интерфейса.Страницы
{
охраняемых недействительными в(объект отправителя, EventArgs в электронной)
{

string constring = "источник данных=DESKTOP-7MRDTE0\\SQLEXPRESS2014;начальный каталог=;идентификатор пользователя=sa;пароль=";
SqlConnection con1 = новый SqlConnection();
con1 = null;
пробовать
{
con1 = новый SqlConnection(constring);
вы видите con1.Открыть();

SqlCommand cmd = new SqlCommand("[usp_GetCampaignSchedule]", con1);
УМК.CommandType = CommandType.Хранимая процедура;
cmd.Parameters.Add("@CampaignID", SqlDbType.Int).Значение = 1102;
SqlDataAdapter da = новый SqlDataAdapter(cmd);

SqlCommand cmd1 = new SqlCommand("[usp_GetEmailStatitics]", con1);
cmd1.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd1.Parameters.Add("@CampaignID", SqlDbType.Int).Значение = 1102;
SqlDataAdapter da1 = новый SqlDataAdapter(cmd1);

SqlCommand cmd2 = new SqlCommand("[usp_GetCampaignDetails]", con1);
cmd2.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd2.Parameters.Add("@CampaignID", SqlDbType.Int).Значение = 1101;
SqlDataAdapter da2 = новый SqlDataAdapter(cmd2);

SqlCommand cmd3 = new SqlCommand("[usp_GetForwardReport]", con1);
cmd3.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd3.Parameters.Add("@CampaignID", SqlDbType.Int).Значение = 1101;
SqlDataAdapter da3 = новый SqlDataAdapter(cmd3);

SqlCommand cmd4 = new SqlCommand("[usp_GetClickThrough]", con1);
cmd4.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd4.Parameters.Add("@CampaignID", SqlDbType.Int).Значение = 1102;
SqlDataAdapter da4 = новый SqlDataAdapter(cmd4);

SqlCommand cmd5 = new SqlCommand("[usp_GetBouncedReport]", con1);
cmd5.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd5.Parameters.Add("@Campaignid", SqlDbType.Int).Значение = 1102;
SqlDataAdapter da5 = новый SqlDataAdapter(cmd5);

DataTable dt = новый DataTable("Таблица 1");
DataTable dt1 = новый DataTable("Таблица 2");
DataTable dt2 = новый DataTable("Таблица 3");
DataTable dt3 = новый DataTable("Таблица 4");
DataTable dt4 = новый DataTable("Таблица 5");
DataTable dt5 = новый DataTable("Таблица 6");
DataSet ds = новый набор данных();
да.Заполнить(ДТ);
и DA1.Заполнить(ст1);
Да2.Заполнить(ст2);
da3.Заполнить(Ст3);
da4.Fill(dt4);
da5.Заполнить(дт5);
ДС.столы.Добавить(dt);
ДС.столы.Добавить(dt1);
ДС.столы.Добавить(dt2);
ДС.столы.Добавить(dt3);
ДС.столы.Добавить(dt4);
ДС.столы.Добавить(dt5);



ExcelPackage package = новый ExcelPackage();
var worksheet = пакет.Рабочая тетрадь.Worksheets.Add("ExcelSheet");
лист.Смотреть.ShowGridLines = false;
int z = 1;
для (int x = 0; x < ds.Таблицы.Count; x++)
{
int r = z;
int t = r + 1;

for (int i = 1; i < ds.Таблицы[x].столбцы.Count + 1; i++)
{
рабочий лист.Клетки[р, я].Значение = ДС.Таблицы[х].Столбцы[я - 1].Метод toString();
}
for (int i = 0; i < ds.Таблицы[x].строки.Граф; i++)
{
для (int j = 0; j < ds.Таблицы[x].столбцы.Count; j++)
{
рабочий лист.Ячейки[i + t, j + 1].Значение = ds.таблицы[x].строки[i]
[Дж].Метод toString();
}
}
з += ДС.Таблицы[х].Строк.Граф + 4;
рабочий лист.Ячейки.AutoFitColumns();
}
пакет.SaveAs(new FileInfo(@"C:\Users\Stored.xlsx"));
}
поймать (исключение бывший)
{
Приставка.

Karthik_Mahalingam

полный код пожалуйста

Karthik_Mahalingam

попробовать это


            DataTable dt = new DataTable("Table Name 1");  // declare the Table Name when creating the DataTable
            dt.Columns.Add("ID" );
            dt.Columns.Add(  "Name");
            dt.Rows.Add(1, "aa");
            dt.Rows.Add(2, "bb");

            DataTable dt1 = new DataTable("Table Name 2");// declare the Table Name when creating the DataTable
            dt1.Columns.Add("ID11");
            dt1.Columns.Add("Name11");
            dt1.Rows.Add(11, "aa1111");
            dt1.Rows.Add(22, "bb111");

            DataTable dt2 = new DataTable("Table Name 3");// declare the Table Name when creating the DataTable
            dt2.Columns.Add("ID22");
            dt2.Columns.Add("Name22");
            dt2.Rows.Add(221, "aa222");
            dt2.Rows.Add(233, "bb222");

            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);





            ExcelPackage package = new ExcelPackage();
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("ExcelSheet");
            worksheet.View.ShowGridLines = false;
            int startIndexOfRow = 1;
            foreach (DataTable dtCurrent in ds.Tables)
            {
                // Adding Title 
                worksheet.Cells[startIndexOfRow, 1].Value = dtCurrent.TableName;
                // Adding Headers 
                startIndexOfRow++;
                for (int i = 0; i < dtCurrent.Columns.Count; i++)
                {
                    worksheet.Cells[startIndexOfRow, (i+1)].Value = dtCurrent.Columns[i].ColumnName;
                }
                // Adding rows

                for (int i = 0; i < dtCurrent.Rows.Count; i++)
                {
                    startIndexOfRow++;
                    for (int j = 0; j < dtCurrent.Columns.Count; j++)
                    {
                        worksheet.Cells[startIndexOfRow, j + 1].Value = dtCurrent.Rows[i][j].ToString();
                    }
                }
                startIndexOfRow += 3;  // 3 empty rows
                 
                package.SaveAs(new FileInfo(@"D:\Projects\CPTemp\CPTemp\TextFile.xlsx"));
            }
        }

Vikrant_saini

Это не дает мне правильного ответа.
С помощью этого кода только одна таблица экспортируется много раз(=нет таблиц, которые мы определяем).
Спасибо

Karthik_Mahalingam

переместите эту линию за пределы петли
пакет.SaveAs(new FileInfo(@"D:\Projects\CPTemp\CPTemp\TextFile.xlsx"));

Vikrant_saini

Нет необходимости делать это, это работает хорошо.
Раньше я делал ошибку, в адаптере данных заполнял только таблицу 1.
А да.заполнить(ДТ).
Спасибо.

Karthik_Mahalingam

using OfficeOpenXml;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Pdf.Security;
using System.Data;
using System.IO;

namespace CP
{
    class POCProgram
    {
        static void Main(string[] args)
        {

            DataTable dt = new DataTable("Table Name 1");  // declare the Table Name when creating the DataTable
            dt.Columns.Add("ID");
            dt.Columns.Add("Name");
            dt.Rows.Add(1, "aa");
            dt.Rows.Add(2, "bb");

            DataTable dt1 = new DataTable("Table Name 2");// declare the Table Name when creating the DataTable
            dt1.Columns.Add("ID11");
            dt1.Columns.Add("Name11");
            dt1.Rows.Add(11, "aa1111");
            dt1.Rows.Add(22, "bb111");

            DataTable dt2 = new DataTable("Table Name 3");// declare the Table Name when creating the DataTable
            dt2.Columns.Add("ID22");
            dt2.Columns.Add("Name22");
            dt2.Rows.Add(221, "aa222");
            dt2.Rows.Add(233, "bb222");

            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);





            ExcelPackage package = new ExcelPackage();
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("ExcelSheet");
            worksheet.View.ShowGridLines = false;
            int startIndexOfRow = 1;
            foreach (DataTable dtCurrent in ds.Tables)
            {
                // Adding Title 
                worksheet.Cells[startIndexOfRow, 1].Value = dtCurrent.TableName;
                // Adding Headers 
                startIndexOfRow++;
                for (int i = 0; i < dtCurrent.Columns.Count; i++)
                {
                    worksheet.Cells[startIndexOfRow, (i + 1)].Value = dtCurrent.Columns[i].ColumnName;
                }
                // Adding rows

                for (int i = 0; i < dtCurrent.Rows.Count; i++)
                {
                    startIndexOfRow++;
                    for (int j = 0; j < dtCurrent.Columns.Count; j++)
                    {
                        worksheet.Cells[startIndexOfRow, j + 1].Value = dtCurrent.Rows[i][j].ToString();
                    }
                }
                startIndexOfRow += 3;  // 3 empty rows

               
            }
            package.SaveAs(new FileInfo(@"D:\Projects\CPTemp\CPTemp\TextFile.xlsx"));
        }
    }
}

Vikrant_saini

Спасибо, все работает нормально.

Karthik_Mahalingam

крутой