mrprestige
جمعه 09 مهر 1395, 00:33 صبح
عرض سلام و ادب خدمت تمامی دوستان ، همونطور که از عنوان تایپیک مشخصه خواستم آموزشی بر همین مبنا بزارم تا کمکی بشه به یک سری از دوستان که بتونن از پس این کار بربیان . خب بدون اتلاف وقت میرم سر اصل قضیه
نحوه Export کردن :
در مرحله اول یه پروزه WinForm ایجاد میکنیم و داخل Refrence هامون فایل کتابخانه ای Microsoft.Office.Interop.Excel رو اضافه میکنیم ( اگر این Dll رو نداشتید از Nuget (https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/) دانلود کنید ) سپس تو قسمت NameSpace هامون using Microsoft.Office.Interop.Excel; رو اضافه میکنیم . خب اول بریم سر طراحی فرم . اول یه DataGridview به فرم اضافه میکنیم و یک کنترل Button . کنترل DataGridview رو به پایگاهتون متصل کنید ( به هر نحوی که مایل بودید بنده اینجا برای پیش فرض بصورت ویزارد اینکار رو کردم) خب وارد رویداد Click مربوط به Button میشیم ( بنده برای اینکه کد هر بخش رو توضیح بدم که چه کاری رو انجام میدن کدها رو بخش بندی کردم )
خب در این بخش اومدم اول برای اینکه فایل اکسل رو ایجاد کنم از این کد ها استفاده کردم
var mg = Missing.Value;
_Application app = new Microsoft.Office.Interop.Excel.Application();
_Workbook wrkbook = app.Workbooks.Add(mg);
در بخش بعد برای اینکه sheet هام رو ایجاد کنم و حصول اطمینان از اینکه Worksheet من null نیست اومدم از دو روش casting استفاده کردم و همینطور نامگذاری صفحه کاری
app.Visible = false;
_Worksheet wrksheet = wrkbook.Sheets["Sheet1"] as Worksheet;
if (wrksheet == null) throw new ArgumentNullException(nameof(wrksheet));
wrksheet = (Worksheet) wrkbook.ActiveSheet;
wrksheet.Name = "Export";
در بخش بعد میرسیم به Header ستون ها که از Datagridview منتقل بشه به فایل اکسل
for (var i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
wrksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}
در بخش بعد اومدم دوتا For تو در تو ایجاد کرم برای انتقال سطرها (حلقه اول) و ستون ها (حلقه دوم ) DGV به فایل اکسل
for (var i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (var j = 0; j < dataGridView1.Columns.Count; j++)
{
wrksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}
خب در بخش انتهایی هم برای اینکه فایل اکسل ایجاد شده رو ذخیره کنیم از این کد استفاده کردم و در آخر نیز از app خارج میشیم
var saveofd = new SaveFileDialog {Filter = "Excel Document (*.xlsx)|*.xlsx ", FileName = "Export"}; //استفاده کنید xls اگه نسخه فایل اکسل شما 2007 به پایین هست از پسوند
if (saveofd.ShowDialog() == DialogResult.OK)
{
wrkbook.SaveAs(saveofd.FileName, mg, mg, mg, mg, mg,
XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive,
XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive);
}
app.Quit();
نحوه Import کردن :
اول یک Datagridview و دو کنترل Button (با نام های btnImport و btnRead ) و یک کنترل Textbox ( با نام txtFileAddress ) ایجاد میکنیم
خب اول میخوایم فایل اکسل مورد نظرمون رو open کنیم در رویداد click دکمه btnRead اینطور مینویسیم
var ofd = new OpenFileDialog
{
Title = "Select file",
FileName = txtFileAddress.Text,
Filter = "Excel Sheet(*.xlsx)|*.xlsx|All Files(*.*)|*.*", //استفاده کنید xls اگه نسخه فایل اکسل شما 2007 به قبل هست از پسوند
FilterIndex = 1
};
if (ofd.ShowDialog() == DialogResult.OK)
txtFileAddress.Text = ofd.FileName;
و در کنترل btnImport اینو بنویسید
var cn =
new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileAddress.Text +
";Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;TypeGuessRows=0;ImportMixedType s=Text'");
var oda = new OleDbDataAdapter("Select * From[Export$]", cn); // درواقع نام همون صفحه فایل اکسل مون هستExport
var dt = new DataTable();
oda.Fill(dt);
dataGridView1.DataSource = dt;
این نکته رو خوب توجه داشته باشید، اگه شما از نسخه ی پایین تر اکسل (2007 به قبل ) استفاده میکنید باید ConnectionString تون به این شکل بنویسید
"Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" + txtFileAddress.Text+ ";Extended Properties =\"Excel 8.0; HDR=Yes;\";"
کلام آخر اینکه امیدوارم که این مطلب براتون گیرا و مفید فایده قرار بگیره .
پیروز و سربلند و موفق باشید .
نحوه Export کردن :
در مرحله اول یه پروزه WinForm ایجاد میکنیم و داخل Refrence هامون فایل کتابخانه ای Microsoft.Office.Interop.Excel رو اضافه میکنیم ( اگر این Dll رو نداشتید از Nuget (https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/) دانلود کنید ) سپس تو قسمت NameSpace هامون using Microsoft.Office.Interop.Excel; رو اضافه میکنیم . خب اول بریم سر طراحی فرم . اول یه DataGridview به فرم اضافه میکنیم و یک کنترل Button . کنترل DataGridview رو به پایگاهتون متصل کنید ( به هر نحوی که مایل بودید بنده اینجا برای پیش فرض بصورت ویزارد اینکار رو کردم) خب وارد رویداد Click مربوط به Button میشیم ( بنده برای اینکه کد هر بخش رو توضیح بدم که چه کاری رو انجام میدن کدها رو بخش بندی کردم )
خب در این بخش اومدم اول برای اینکه فایل اکسل رو ایجاد کنم از این کد ها استفاده کردم
var mg = Missing.Value;
_Application app = new Microsoft.Office.Interop.Excel.Application();
_Workbook wrkbook = app.Workbooks.Add(mg);
در بخش بعد برای اینکه sheet هام رو ایجاد کنم و حصول اطمینان از اینکه Worksheet من null نیست اومدم از دو روش casting استفاده کردم و همینطور نامگذاری صفحه کاری
app.Visible = false;
_Worksheet wrksheet = wrkbook.Sheets["Sheet1"] as Worksheet;
if (wrksheet == null) throw new ArgumentNullException(nameof(wrksheet));
wrksheet = (Worksheet) wrkbook.ActiveSheet;
wrksheet.Name = "Export";
در بخش بعد میرسیم به Header ستون ها که از Datagridview منتقل بشه به فایل اکسل
for (var i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
wrksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}
در بخش بعد اومدم دوتا For تو در تو ایجاد کرم برای انتقال سطرها (حلقه اول) و ستون ها (حلقه دوم ) DGV به فایل اکسل
for (var i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (var j = 0; j < dataGridView1.Columns.Count; j++)
{
wrksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}
خب در بخش انتهایی هم برای اینکه فایل اکسل ایجاد شده رو ذخیره کنیم از این کد استفاده کردم و در آخر نیز از app خارج میشیم
var saveofd = new SaveFileDialog {Filter = "Excel Document (*.xlsx)|*.xlsx ", FileName = "Export"}; //استفاده کنید xls اگه نسخه فایل اکسل شما 2007 به پایین هست از پسوند
if (saveofd.ShowDialog() == DialogResult.OK)
{
wrkbook.SaveAs(saveofd.FileName, mg, mg, mg, mg, mg,
XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive,
XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive, XlSaveAsAccessMode.xlExclusive);
}
app.Quit();
نحوه Import کردن :
اول یک Datagridview و دو کنترل Button (با نام های btnImport و btnRead ) و یک کنترل Textbox ( با نام txtFileAddress ) ایجاد میکنیم
خب اول میخوایم فایل اکسل مورد نظرمون رو open کنیم در رویداد click دکمه btnRead اینطور مینویسیم
var ofd = new OpenFileDialog
{
Title = "Select file",
FileName = txtFileAddress.Text,
Filter = "Excel Sheet(*.xlsx)|*.xlsx|All Files(*.*)|*.*", //استفاده کنید xls اگه نسخه فایل اکسل شما 2007 به قبل هست از پسوند
FilterIndex = 1
};
if (ofd.ShowDialog() == DialogResult.OK)
txtFileAddress.Text = ofd.FileName;
و در کنترل btnImport اینو بنویسید
var cn =
new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileAddress.Text +
";Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;TypeGuessRows=0;ImportMixedType s=Text'");
var oda = new OleDbDataAdapter("Select * From[Export$]", cn); // درواقع نام همون صفحه فایل اکسل مون هستExport
var dt = new DataTable();
oda.Fill(dt);
dataGridView1.DataSource = dt;
این نکته رو خوب توجه داشته باشید، اگه شما از نسخه ی پایین تر اکسل (2007 به قبل ) استفاده میکنید باید ConnectionString تون به این شکل بنویسید
"Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" + txtFileAddress.Text+ ";Extended Properties =\"Excel 8.0; HDR=Yes;\";"
کلام آخر اینکه امیدوارم که این مطلب براتون گیرا و مفید فایده قرار بگیره .
پیروز و سربلند و موفق باشید .