Vikrant_saini Ответов: 1

Экспорт хранимых процедур в excel


Is there anyway to export multiple stored procedures to single excel sheet.
I want to export multiple stored procedures to excel sheet(single) using epplus library, but i am only able to export two stored procedure in single sheet.
i will be glad if i get answers.
Thanks.


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

 SqlCommand cmd = new SqlCommand("[usp_GetCampaignSchedule]", con1);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@CampaignID", SqlDbType.Int).Value = 1102;
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            SqlCommand cmd1 = new SqlCommand("[usp_GetEmailStatitics]", con1);
            cmd1.CommandType = CommandType.StoredProcedure;
            cmd1.Parameters.Add("@CampaignID", SqlDbType.Int).Value = 1102;
            SqlDataAdapter da1 = new SqlDataAdapter(cmd1);

           

            DataTable dt = new DataTable();
            DataTable dt1 = new DataTable();
            DataTable dt2 = new DataTable();
            DataSet ds = new DataSet();
            da.Fill(dt1);
            da1.Fill(dt2);
           ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);


            ExcelPackage package = new ExcelPackage();
            var worksheet = package.Workbook.Worksheets.Add("ExcelSheet");
         
            int z = 1;
            for (int x = 0; x < ds.Tables.Count; x++)
            {
                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;
            }
            package.SaveAs(new FileInfo(@"C:\Users\Desktop\Work\CampaignID.xlsx"));

Karthik_Mahalingam

неужели столбцы одинаковы у всех ИП?

Vikrant_saini

Нет

Karthik_Mahalingam

тогда как же вы объедините данные из 3-х ИП ?
вы хотите отобразить данные один под другим ?

Vikrant_saini

Да, я хочу отобразить таблицу данных одну под другой.
и у нас есть 7 таблиц хранимых процедур.

1 Ответов

Рейтинг:
5

Karthik_Mahalingam

пробовать

using (ExcelPackage package = new ExcelPackage())
           {
               ExcelWorksheet ws = package.Workbook.Worksheets.Add("Your Sheet Name");
               int rowNumber = 1;
               foreach (DataTable dt in ds.Tables)
               {
                   ws.Cells["A" + rowNumber].LoadFromDataTable(dt, true);
                   rowNumber += dt.Rows.Count + 2; // to create 2 empty rows
               }

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


Vikrant_saini

foreach (DataTable dt in ds.Таблицы)
В этой строке dt показывает ошибку как "не может быть объявлена в этой области".
Как я уже определил его, и если я хочу добавить больше таблицы и DataAdapter.

DataTable dt = новый DataTable();
DataTable dt1 = новый DataTable();
DataTable dt2 = новый DataTable();
DataSet ds = новый набор данных();
да.Заполнить(ст1);
и DA1.Заполнить(ст2);
ДС.столы.Добавить(dt1);
ДС.столы.Добавить(dt2);

Karthik_Mahalingam

  foreach (DataTable dtTemp in ds.Tables)
                {
                    ws.Cells["A" + rowNumber].LoadFromDataTable(dtTemp, true);
                    rowNumber += dtTemp.Rows.Count + 2; // to create 2 empty rows
                }

Vikrant_saini

Я попробовал это сделать, но это не дает мне правильного вывода.
В моем коде я беру 6 sp, а в качестве выходных данных получаю только три таблицы в excel.

Karthik_Mahalingam

вы добавили добавить 6 таблиц данных в набор данных ?

Vikrant_saini

да, я так и сделал.
Бхаи я решил свою проблему и очень благодарен тебе, так как ты подал мне идею.
В моем коде строка, предназначенная для пустых строк, изменилась на эту-
z +=ds.Таблицы[x].строки.Граф + 4. Это дает мне правильный вывод.
Большое спасибо. Расскажу вам о другой дискуссии, я новый ученик .net.

Karthik_Mahalingam

добро пожаловать