PDA

View Full Version : تبدیل datatable به فایل Excel



rezaee2
سه شنبه 27 اسفند 1392, 09:26 صبح
سلام و وقت بخیر
برای تبدیل یک جدول داده به فایل اکسل، با استفاده از توابع خود ویژوال استادیو قطعه کد زیر رو پیدا کردم:
void SetDataTable_To_Excel(MyTable dtTable, string PathFileName)
{
try
{
var excel = new Excel.Application {Visible = false};
var misValue = System.Reflection.Missing.Value;
var wb = excel.Workbooks.Add(misValue);
//var wb = excel.Workbooks.Open(PathFileName);
Excel.Worksheet sh = wb.Sheets.Add();
sh.Name = "TestSheet";
sh.Cells[1,"A"].Value2 = "EMPLOYEENUMBER";
sh.Cells[1, "B"].Value2 = "TIMEFROM";
sh.Cells[1, "C"].Value2 = "TIMETO";
sh.Cells[1, "D"].Value2 = "HOLIDAY";
sh.Cells[1, "E"].Value2 = "RESTDAY";

// Insert Rows
for (int i = 0; i < dtTable.RowsCount; i++)
{
sh.Cells[i + 2, "A"].Value2 = dtTable.Rows[i][0]; // EmployeeNumber
sh.Cells[i + 2, "B"].Value2 += dtTable.Rows[i][1]; // Time From
sh.Cells[i + 2, "C"].Value2 += dtTable.Rows[i][2]; // Time To
sh.Cells[i + 2, "D"].Value2 += dtTable.Rows[i][3]; // Holiday
sh.Cells[i + 2, "E"].Value2 += dtTable.Rows[i][4]; // Rest Day
}

wb.SaveAs(PathFileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
wb.Close(true);
excel.Quit();
}
catch (Exception ex)
{
throw;
}
}
نکته اینه که باید قبلش رفرنسش رو اضافه کرد
microsoft.office.introp.excel

اما وقتی کد رو به برنامه اضافه میکنم تعریف متغییرها رو نمیشناسه. اول از همه به void بودن تابع گیر میده و بعد زیر اکسل تو خطی که زیر زدم خط میکشه. در ادامه انگار متغییر هایی که تعریف شده رو نمیشناسه
var excel = new Excel.Application {Visible = false};

شما اگه لطف کنید و این رو تو یه پروژه پیست کنید و بررسی کنید ببینید ایراد داره و آیا ایرادش رو متوجه میشید ممنون میشم

Mojtaba.Shateri
سه شنبه 27 اسفند 1392, 10:28 صبح
کدتون رو اصلاح و تست کردم ، امیدوارم به کارتون بیاد :
void SetDataTable_To_Excel( System.Data.DataTable dtTable, string PathFileName)
{
try
{
var excel = new Microsoft.Office.Interop.Excel.Application { Visible = false };
var misValue = System.Reflection.Missing.Value;
var wb = excel.Workbooks.Add(misValue);
//var wb = excel.Workbooks.Open(PathFileName);
Microsoft.Office.Interop.Excel.Worksheet sh = wb.Sheets.Add();
sh.Name = "TestSheet";
sh.Cells[1, "A"].Value2 = "EMPLOYEENUMBER";
sh.Cells[1, "B"].Value2 = "TIMEFROM";
sh.Cells[1, "C"].Value2 = "TIMETO";
sh.Cells[1, "D"].Value2 = "HOLIDAY";
sh.Cells[1, "E"].Value2 = "RESTDAY";

// Insert Rows
for (int i = 0; i < dtTable.Rows.Count; i++)
{
sh.Cells[i + 2, "A"].Value2 = dtTable.Rows[i][0]; // EmployeeNumber
sh.Cells[i + 2, "B"].Value2 += dtTable.Rows[i][1]; // Time From
sh.Cells[i + 2, "C"].Value2 += dtTable.Rows[i][2]; // Time To
sh.Cells[i + 2, "D"].Value2 += dtTable.Rows[i][3]; // Holiday
sh.Cells[i + 2, "E"].Value2 += dtTable.Rows[i][4]; // Rest Day
}

wb.SaveAs(PathFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWork bookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode. xlExclusive, misValue, misValue, misValue, misValue, misValue);
wb.Close(true);
excel.Quit();
}
catch (Exception ex)
{
throw;
}
}

rezaee2
سه شنبه 27 اسفند 1392, 13:06 عصر
117112


117113

سلام جناب شاطری
ممنون از پاسخت
من دوتا مشکل دارم
1- توی تصویر بالایی ارورهای کدی که دادی رو نشون میده
2- تصویر پایینی اینو نشون میده وقتی رفرنس اکسل رو اضافه میکنم تمام دیتاتیبلهای برنامه رو اررور میده. انگار که با شیت های اکسل قاطی میشه!

چاره چیه؟

Mojtaba.Shateri
سه شنبه 27 اسفند 1392, 14:34 عصر
DataTable شما احتمالا از Microsoft.Office.Interop.Excel.DataTable رفرنس میگیره.
بهتره بجای همه DataTable ها از System.Data.DataTable استفاده کنی.
بعد بگو چه نتیجه ای گرفتی.

rezaee2
چهارشنبه 28 اسفند 1392, 07:06 صبح
تشکر جناب شاطری
مشکل دیتا تیبل حل شده(یعنی مشکل تصویر دوم)
اما مشکل تصویر اول هنوز باقیه و هنوز خود کد تابع رو به درستی و کامل نمیشناسه.. توی تصویر اول معلومه که کجاها ارورر میده.

Mojtaba.Shateri
چهارشنبه 28 اسفند 1392, 12:40 عصر
یک سری خطاهایی که لیست شده بخاطر سنتکس اشتباهه . مثلا گفته باید ; بزاری یا ...
از طرفی متد SetDataTable_To_Excel در سیستم خودم تست کردم و کدش مشکل سینتکسی نداره.
خطای سینتکس مال جاهای دیگه برنامه هستش.
اگه لیست خطاهارو کامل ببینید تو سیستمتون ، به Value2 گیر میده میگه همچین مشخصه ای در Datatable وجود نداره یا ممکنه بگه مشخصه جای نا مناسبی استفاده شده.
دلیل این خطا چیه؟
دلیلش اینه که تکلیف namespace شیئ DataTable معلوم نیست.
ممکنه دوتا DataTable از دوتا reference مختلف گرفته باشید . شاید شما Microsoft.Office.Interop.Excel.DataTable رو به متد SetDataTable_To_Excel با System.Data.DataTable پاس میدید.

rezaee2
دوشنبه 22 اردیبهشت 1393, 08:06 صبح
من تونستم یه کد دیگه رو که از وی بی بدست آوردم برای ایجاد فایل اکسل بکار ببرم (تبدیلش کردم به سی شارپ) اما متوجه این شدم که مشکل من اینه... این دستورات توی سی شارپ با دات نت فریم ورک 3.5 کار نمیکنه و باید حداقل 4 باشه
اما برای وی بی با دات نت 3.5 هم کار میکنه

راه حلی هست؟