PDA

View Full Version : مبتدی: گرفتن خروجی اکسل از database



sldvhlds
شنبه 11 شهریور 1396, 21:28 عصر
با سلام خدمت اساتید
دوستان در مورد خروجی اکسل گرفتن توی سایت زیاد بحث شده ولی تقریبا همه تاپیکهائی که من دیدم خروجی از گرید ویو گرفته میشه ولی من توی برنامه خودم می خوام که کاربر یکسری پارامتر رو توی تکست باکسهایی درج کنه مثلا سال ماه وکدملی بعد برنامه با استفاده از اون پارامترها یک سلکت انجام بده توی تیبل 1 ونتیجه سلکت رو بریزه توی شیت 1 فایل اکسل (البته اسم شیت رو هم باید عوض کنه مثلا بزاره "آبان ماه" ویک ستون به عنوان ردیف بگذاره وهمچنین فونت روهم فونتی باشه که توی برنامه تعریف می کنیم) بعد یک سلکت انجام بده توی تیبل دوم نتیجه رو بریزه توی شیت دوم همون فایل وهمینجور تا تیبل آخر پارامترها ثابته فقط باید توی جدولهای خاصی که می خواهیم سلکت کنه دوستان ممنون میشم اگه راهنمائی بفرمائیدالبته دیتابیس SQL Server هست که فکر نکنم فرقی هم بکنه

Mahmoud Zaad
شنبه 11 شهریور 1396, 22:40 عصر
سلام
خب کار خاصی نداره شما در همون مثال هایی که برای دیتاگریدویو هست، به جای دیتاگریدویو از دیتاتیبل استفاده کنید. یعنی حلقه ها رو برای دیتاتیبل بنویسید. پس روال کار میشه 1- دریافت اطلاعات از دیتابیس و ریختن توی دیتاتیبل 2- فرستادن اطلاعات دیتاتیبل به اکسل

رامین مرادی
یک شنبه 12 شهریور 1396, 08:35 صبح
با سلام خدمت اساتید
دوستان در مورد خروجی اکسل گرفتن توی سایت زیاد بحث شده ولی تقریبا همه تاپیکهائی که من دیدم خروجی از گرید ویو گرفته میشه ولی من توی برنامه خودم می خوام که کاربر یکسری پارامتر رو توی تکست باکسهایی درج کنه مثلا سال ماه وکدملی بعد برنامه با استفاده از اون پارامترها یک سلکت انجام بده توی تیبل 1 ونتیجه سلکت رو بریزه توی شیت 1 فایل اکسل (البته اسم شیت رو هم باید عوض کنه مثلا بزاره "آبان ماه" ویک ستون به عنوان ردیف بگذاره وهمچنین فونت روهم فونتی باشه که توی برنامه تعریف می کنیم) بعد یک سلکت انجام بده توی تیبل دوم نتیجه رو بریزه توی شیت دوم همون فایل وهمینجور تا تیبل آخر پارامترها ثابته فقط باید توی جدولهای خاصی که می خواهیم سلکت کنه دوستان ممنون میشم اگه راهنمائی بفرمائیدالبته دیتابیس SQL Server هست که فکر نکنم فرقی هم بکنه


نحوه خروجی به اکسل رو اینجا بزارید تا ما هم یاد بگیریم.

sldvhlds
دوشنبه 13 شهریور 1396, 06:33 صبح
سلام خدمت همه دوستان من با استفاده از تاپیکهای خود سایت و راهنمائهای دوستان فعلا یک کارو تونستم انجام بدم خوندن اطلاعات از یک جدول دیتا بیس وریختن اطلاعات گرید ویو توی یه شیت فایل اکسل مشکل اصلی اینه که من میخوام اطلاعات رو از نتیجه چند تا کوئری بریزم توی چند تا شیت یک فایل اکسل (یعنی یک فایل اکسلی که چند تا شیت داره وهرکدوم از اون شیتها حاوی اطلاعات یک جدول از دیتابیس با شرایط خاصه) ممنون میشم دوستان اگه راهنمائی بفرمایند نمونه کدی ویا راهنمائی با جزئیات کامل باز هم تشکر از وقتی که میذارید

رامین مرادی
دوشنبه 13 شهریور 1396, 08:21 صبح
سلام خدمت همه دوستان من با استفاده از تاپیکهای خود سایت و راهنمائهای دوستان فعلا یک کارو تونستم انجام بدم خوندن اطلاعات از یک جدول دیتا بیس وریختن اطلاعات گرید ویو توی یه شیت فایل اکسل مشکل اصلی اینه که من میخوام اطلاعات رو از نتیجه چند تا کوئری بریزم توی چند تا شیت یک فایل اکسل (یعنی یک فایل اکسلی که چند تا شیت داره وهرکدوم از اون شیتها حاوی اطلاعات یک جدول از دیتابیس با شرایط خاصه) ممنون میشم دوستان اگه راهنمائی بفرمایند نمونه کدی ویا راهنمائی با جزئیات کامل باز هم تشکر از وقتی که میذارید

خب همین کد رو بزار تا بررسی کنیم هم منم یاد میگیرم هم شاید راهی پیدا کردم برا این که تو شیت جدید داده ها رو بریزیم

sldvhlds
دوشنبه 13 شهریور 1396, 08:47 صبح
string code_meli, Personal_Number, Year, Month;
code_meli = txt_code_meli.Text;
Personal_Number = txt_Pnumber.Text;
Year = txt_Year.Text;
Month = txt_Month.Text;
//بایند کردن دیتا گرید ویو به جدول
string ShowAll = "select * from dbo.Personal where code_meli='" + code_meli + "'AND Year='" + Year + "'AND Month='" + Month + "'";
DataTable dt = new DataTable();
dt = Conction.DoQuery(ShowAll);
dgv1 .DataSource =dt ;

object miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = false;
worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;
worksheet.Name = "مهرماه";
worksheet.Cells[1] = "ردیف";
worksheet.Cells[2] = "شماره پرسنلی";
worksheet.Cells[4] = "کدملی";
worksheet.Cells[3] = "نام ونام خانوادگی";
worksheet.Cells[5] = "کارکردماه";

//ایجاد شماره ردیف برای فایل اکسل
// for (int i = 1; i < dgv1.RowCount +1; i++)
// {

// for (int j = 2; j < dgv1.RowCount + 1; j++)
// {
// {
// worksheet.Cells[j, i] = j-1 ;


// }
//}
// }


for (int i = 0; i < dgv1.Rows.Count - 1; i++)
{

for (int j = 0; j < dgv1.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 2] = dgv1.Rows[i].Cells[j].Value;

}
}


//ایجاد فایل خروجی
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel Document(*.xlsx)|*.xlsx";
sfd.FileName = "Export";
if (sfd.ShowDialog() == DialogResult.OK)
{
workbook.SaveAs(sfd.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode. xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
app.Quit();

}
سلام این هم کدی که استفاده میکنم

Mahmoud Zaad
دوشنبه 13 شهریور 1396, 09:31 صبح
این الان کار میکنه دیگه؟
شما این خط رو کامنت کن: dgv1 .DataSource =dt ;
حلقه های زیر رو هم به تغییر بده:
for (int i = 0; i < dgv1.Rows.Count - 1; i++) {


for (int j = 0; j < dgv1.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 2] = dgv1.Rows[i].Cells[j].Value;

}
}

تبدیل به:

for (int i = 0; i < dt.Rows.Count; i++)
{

for (int j = 0; j < dt.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 2] = dt.Rows[i][j];
}
}


این خط هم که شماره sheet رو تعیین میکنه
worksheet = workbook.Sheets["Sheet1"];

sldvhlds
دوشنبه 13 شهریور 1396, 10:00 صبح
این الان کار میکنه دیگه؟
شما این خط رو کامنت کن: dgv1 .DataSource =dt ;
حلقه های زیر رو هم به تغییر بده:
for (int i = 0; i < dgv1.Rows.Count - 1; i++) {


for (int j = 0; j < dgv1.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 2] = dgv1.Rows[i].Cells[j].Value;

}
}

تبدیل به:

for (int i = 0; i < dt.Rows.Count; i++)
{

for (int j = 0; j < dt.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 2] = dt.Rows[i][j];
}
}


این خط هم که شماره sheet رو تعیین میکنه
worksheet = workbook.Sheets["Sheet1"];

سلام دوست عزیز روش شما برای این بود که من دیگه از گرید ویواستفاده نکنم درسته؟
استفاده نکردن از گرید ویو مشکل دوم ودر حقیقت مشکل کوچک وکم اهمیت منه مشکل اصلی اینکه که من می خوام اطلاعات از چند تا کوئری خونده بشه و توی چند تا شیت اکسل ریخته بشه روش شما هیچ اشاره ای به شیتهای بعدی نداره میتونید توی این قسمت کمک کنید ممنون از لطف زیادتون

Mahmoud Zaad
دوشنبه 13 شهریور 1396, 10:12 صبح
خب شما هر چند تا کوئری که می خواید رو باید اجرا کنید و توی دیتاتیبل های مختلف بریزید و بعد هر دیتاتیبل رو توی یک sheet بریزید. یعنی این خط
worksheet = workbook.Sheets["Sheet1"]; مثلاً به جای sheet1 بنویسید sheet2 و ...
اینم یه مثال (https://www.codeproject.com/articles/335589/export-multiple-datasets-to-multiple-excel-sheets)

----------------------------
مثال رو تغییر دادم.

sldvhlds
دوشنبه 13 شهریور 1396, 10:21 صبح
ممنون تست میکنم خبرش رو میگذارم

sldvhlds
دوشنبه 13 شهریور 1396, 11:05 صبح
سلام ممنون از راهنمائی دوستان مشکل حل شد مدیران لطف کنن تاپیک رو جزو تاپیکهای حل شده بزارن