PDA

View Full Version : سوال: انتقال اطلاعات از دیتاگرید به excel



raminb
شنبه 09 مهر 1390, 09:58 صبح
سلام
می خوام از اطلاعات دیتاگرید یک خروجی در اکسل بگیرم
اگه کسی بلده ممنون می شم بهم کمک کنه

jeson_park
شنبه 09 مهر 1390, 10:40 صبح
با سلام
کدش رو گذاشتم
به صورت تابع هست
موفق باشید

faravaghi
شنبه 09 مهر 1390, 11:00 صبح
سلام،
با این روش شما میتوانید از DataGridView اطلاعات رو به فایل Excel منتقل کنید:
using Microsoft.Office.Interop.Excel;
using System.Globalization;
using System.Threading;

//.....

SaveFileDialog save = new SaveFileDialog();
save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolde r.Personal);
save.Filter = "Excel Files (*.xls)|*.xls";

if (save.ShowDialog(this) == DialogResult.OK)
{
CultureInfo Oldci = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");

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 = true;
worksheet = (Worksheet)workbook.Sheets["Sheet1"];
worksheet = (Worksheet)workbook.ActiveSheet;
worksheet.Name = "Exported from gridview";

// Set Format Cell:
((Range)worksheet.Cells).get_Range("A1", "G1");
((Range)worksheet.Cells).EntireRow.AutoFit();
((Range)worksheet.Cells[1, 1]).EntireColumn.NumberFormat = "@";

for (int i = 1; i < DataGridView1.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = DataGridView1.Columns[i - 1].HeaderText;
}

for (int i = 0; i < DataGridView1.Rows.Count - 1; i++)
for (int j = 0; j < DataGridView1.Columns.Count; j++)
if (DataGridView1.Rows[i].Cells[j].Value == null)
worksheet.Cells[i + 2, j + 1] = "";
else
worksheet.Cells[i + 2, j + 1] = DataGridView1.Rows[i].Cells[j].Value.ToString();

workbook.SaveAs(save.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();
}

shahrzad87
شنبه 07 آبان 1390, 12:31 عصر
سلام
من یک فرم دارم که براش یک کلید جستجو گذاشتم که فایل excel رو انتخاب می کنم و می خوام این فایل رو توی دیتاگرید نشون بدم و اسم فیلدهای excel رو هم توی comboBox نشون بدم که کاربر مثلا یک فیلد رو به عنوان نام و یکی رو فامیلی و غیره انتخاب کنه و یک کلید ثبت دارم که می خوام فیلدهای فایل excel را در دیتابیس که sql هست با توجه به فیلدهایی که انتخاب شده ذخیره کنم، چه کدی باید بنویسم؟ :|
برای brows کد زیر رو نوشتم:




private void btn_BrowsExcel_Click(object sender, EventArgs e)

{



try

{

openFileDialogOfExcel.FileName = System.Windows.Forms.

Application.StartupPath.ToString();

openFileDialogOfExcel.Filter =

"excel Files (*.xls)|*.xls|(*.xlsx)|*.xlsx";

openFileDialogOfExcel.ShowDialog();



if (openFileDialogOfExcel.FileName != string.Empty)

{

txt_ExcelPath.Text = openFileDialogOfExcel.FileName;



//btnInsert.Enabled = true;

}

showData();



//FillCombo();

}



catch (Exception ec)

{



MessageBox.Show(ec.ToString());

}

}






OleDbDataReader odr;



private void showData()

{



if (txt_ExcelPath.Text != string.Empty)

{



string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""Excel 12.0;HDR=YES;"";";

connectionString +=

"Data Source=" + txt_ExcelPath.Text + ";";



string strSQL = "SELECT * FROM [Sheet1$]";



OleDbConnection excelConnection = new OleDbConnection(connectionString);

excelConnection.Open();

// This code will open excel file.



OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);



OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);



// OleDbDataReader odr = dbCommand.ExecuteReader();



// odr.Close();



// create data table



DataTable dTable = new DataTable();

dataAdapter.Fill(dTable);

dataBingingSrc.DataSource = dTable;

dg_ExcelList.DataSource = dataBingingSrc;

dTable.Dispose();

dataAdapter.Dispose();

dbCommand.Dispose();

excelConnection.Close();

excelConnection.Dispose();

}

}







private void FillCombo()

{

 



OleDbConnection oconn = new OleDbConnection

(

@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

txt_ExcelPath.Text +

" ;Extended Properties=Excel 8.0");//OledbConnection and



try

{



// OleDbCommand ocmd = new OleDbCommand("select * from [" + txtSheetname.Text + "$]", oconn);



//



OleDbCommand ocmd = new OleDbCommand("select * from [Sheet1$]", oconn);

oconn.Open();

//Here [Sheet1$] is the name of the sheet



OleDbDataReader odr = ocmd.ExecuteReader();

cmb_name.Items.Clear();

cmb_family.Items.Clear();



for (int i = 0; i < odr.FieldCount; i++)

{

cmb_name.Items.Add(odr.GetName(i).ToString());

cmb_family.Items.Add(odr.GetName(i).ToString());

}

oconn.Close();

cmb_family.SelectedIndex = 0;

cmb_name.SelectedIndex = 0;

}



catch (DataException ee)

{



//lblmsg.Text = ee.Message;



//lblmsg.ForeColor = System.Drawing.Color.Red;

}

 

}

shahrzad87
شنبه 07 آبان 1390, 12:53 عصر
نمی دونم چرا کد رو اینجا کپی می کنم اینجوری نشون می ده؟؟

faravaghi
شنبه 07 آبان 1390, 13:10 عصر
سلام گلم،
ببین این بدردت میخوره. من از این کد تو یکی از پروژه هام برای ورود اطلاعات اعضاء از فایل اکسل به بانک استفاده کردم.
سه تا تابع است یکی برای انتخاب فایل دومی برای انتقال به DataGridView و سومی برای ورود اطلاعات از DataGridView به بانک.
اگه سوال داشتین بپرسید.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Common;
using System.Globalization;

/*
*
* انتخاب کردن فايل Excel
*
*/
private void ShowFileDioalog(object sender, EventArgs e)
{
try
{
DialogFile.Filter = "Excel Worksheets |*.xls;*.xlsx";
DialogFile.Title = "... انتخاب مسير فايل اکسل";
//DialogFile.InitialDirectory = ExecutFile + @"\Backup_" + BackupFormat + ".bak";


if (DialogFile.ShowDialog() == DialogResult.OK)
{
if (DialogFile.FileName != "")
{
txtExelFile.Text = DialogFile.FileName;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

/*
*
* افزودن اطلاعات فايل اکسل به گريد ويو
*
*/
private void AddMembers(object sender, EventArgs e)
{
try
{
if (txtExelFile.Text == string.Empty)
{
MessageBox.Show(". لطفا فايل اکسل مورد نظر را انتخاب نماييد");
return;
}

if (txtSheet.Text.Trim() == string.Empty
&& txtName.Text.Trim() == string.Empty
&& txtFamily.Text.Trim() == string.Empty
&& txtMeliCode.Text.Trim() == string.Empty)
{
MessageBox.Show(". نام پارامتر هاي ورودي را انتخاب نماييد");
return;
}

if (DgMembers.Rows.Count > 0)
{
if (MessageBox.Show("آيا مايل به حذف اطلاعات قبلي ميباشيد ؟", "", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
{
return;
}

for (int j = DgMembers.Rows.Count - 1; j > 0; j--)
{
DgMembers.Rows.RemoveAt(j);
}
}
/* اطلاعات فايل اکسل */
string FileName = txtExelFile.Text;
string SheetName = txtSheet.Text;
/* نام هر رديف از فايل اکسل */
string Name = txtName.Text;
string Family = txtFamily.Text;
string FatherName = txtFatherName.Text;
string MeliCode = txtMeliCode.Text;
string Sex = txtSex.Text;

string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=\"Excel 12.0;HDR=YES\";", FileName);

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;

using (DbCommand command = connection.CreateCommand())
{
// Cities$ comes from the name of the worksheet
command.CommandText = "SELECT "
+ Name + ","
+ Family + ","
+ FatherName + ","
+ MeliCode + ","
+ Sex
+ " FROM [" + SheetName + "$]";

connection.Open();

using (DbDataReader dr = command.ExecuteReader())
{
int i = 0;
while (dr.Read())
{
string[] StrMember = new string[] {
(i + 1).ToString()
, dr[Name].ToString()
, dr[Family].ToString()
, dr[FatherName].ToString()
, dr[MeliCode].ToString()
, dr[Sex].ToString()};


DgMembers.Rows.Add(StrMember);
i++;
}
}
connection.Close();
}
}
txtCount.Text = DgMembers.Rows.Count.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

/*
*
* ورود اطلاعات از گريدويو به بانک
*
*/
private void InsertMembers(object sender, EventArgs e)
{
try
{
if (DgMembers.Rows.Count <= 0)
return;

int MemberNumber = 0;
bool flag = false;

for (int i = DgMembers.Rows.Count - 1; i >= 0; i--)
{
/* متد افزودن عضو در بانک */
Result = m.Insert(DgMembers.Rows[i].Cells["DgMemberShip"].Value.ToString()
, DgMembers.Rows[i].Cells["DgName"].Value.ToString()
, DgMembers.Rows[i].Cells["DgFamily"].Value.ToString()
, DgMembers.Rows[i].Cells["DgFatherName"].Value.ToString()
, DgMembers.Rows[i].Cells["DgMeliCode"].Value.ToString()
, Convert.ToInt32(DgMembers.Rows[i].Cells["DgSex"].Value));

if (MemberNumber < Convert.ToInt32(DgMembers.Rows[i].Cells["DgMemberShip"].Value))
{
MemberNumber = Convert.ToInt32(DgMembers.Rows[i].Cells["DgMemberShip"].Value);
}

if (Result.Equals(0))
{
DgMembers.Rows.RemoveAt(i);
}
else
{
flag = true;
}
}

if (!flag)
{
MessageBox.Show(".ورود با موفقيت انجام پذيرفت");
this.Close();
}
else
{
MessageBox.Show("در ثبت اين افراد مشکلي رخ داده است\r\n لطفا عدم ثبت فرد يا شماره عضويت را بررسي نماييد");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

ad.davachi
شنبه 07 آبان 1390, 13:25 عصر
با سلام
کدش رو گذاشتم
به صورت تابع هست
موفق باشید
این تابع هیچی به عنوان خروجی برنمیگردونه آیا باید چیزی بهش اضافه کنیم؟

ad.davachi
شنبه 07 آبان 1390, 13:29 عصر
سلام،
با این روش شما میتوانید از DataGridView اطلاعات رو به فایل Excel منتقل کنید:
using Microsoft.Office.Interop.Excel;
using System.Globalization;
using System.Threading;

//.....

SaveFileDialog save = new SaveFileDialog();
save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolde r.Personal);
save.Filter = "Excel Files (*.xls)|*.xls";

if (save.ShowDialog(this) == DialogResult.OK)
{
CultureInfo Oldci = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");

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 = true;
worksheet = (Worksheet)workbook.Sheets["Sheet1"];
worksheet = (Worksheet)workbook.ActiveSheet;
worksheet.Name = "Exported from gridview";

// Set Format Cell:
((Range)worksheet.Cells).get_Range("A1", "G1");
((Range)worksheet.Cells).EntireRow.AutoFit();
((Range)worksheet.Cells[1, 1]).EntireColumn.NumberFormat = "@";

for (int i = 1; i < DataGridView1.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = DataGridView1.Columns[i - 1].HeaderText;
}

for (int i = 0; i < DataGridView1.Rows.Count - 1; i++)
for (int j = 0; j < DataGridView1.Columns.Count; j++)
if (DataGridView1.Rows[i].Cells[j].Value == null)
worksheet.Cells[i + 2, j + 1] = "";
else
worksheet.Cells[i + 2, j + 1] = DataGridView1.Rows[i].Cells[j].Value.ToString();

workbook.SaveAs(save.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();
}

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

faravaghi
شنبه 07 آبان 1390, 13:43 عصر
سلام دوست عزیز،
چه خطایی میگیره!

A.Farzin
شنبه 29 بهمن 1390, 15:44 عصر
با تشكر از جناب faravaghi
كد ارسال اطلاعات به اكسل را چگونه بايد تغيير داد كه نيازي به ذخيره كردن واقعي فايل و تعيين نام براي آن وجود نداشته باشد.
به عبارت ديگر، اطلاعات در رم ذخيره شود و ذخيره كردن واقعي آنها به اكسل واگذار گردد.
باز هم متشكرم

myazdani
شنبه 29 بهمن 1390, 17:55 عصر
اینیکی هم اررور میده .
لطفا اگه کتابخونه ای که قبلا امتحان شده در مورد انتقال اطلاعات از گرید ویو و دیتاتیبل به اکسل دارید معرفی کنید

با اجازه از faravaghi
دوست عزيز از Add references تب .net گزينه Microsoft.Office.Interop.Excel رو تيك بزن

myazdani
شنبه 29 بهمن 1390, 17:58 عصر
سلام،
با این روش شما میتوانید از DataGridView اطلاعات رو به فایل Excel منتقل کنید:
using Microsoft.Office.Interop.Excel;
using System.Globalization;
using System.Threading;

//.....

SaveFileDialog save = new SaveFileDialog();
save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolde r.Personal);
save.Filter = "Excel Files (*.xls)|*.xls";

if (save.ShowDialog(this) == DialogResult.OK)
{
CultureInfo Oldci = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");

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 = true;
worksheet = (Worksheet)workbook.Sheets["Sheet1"];
worksheet = (Worksheet)workbook.ActiveSheet;
worksheet.Name = "Exported from gridview";

// Set Format Cell:
((Range)worksheet.Cells).get_Range("A1", "G1");
((Range)worksheet.Cells).EntireRow.AutoFit();
((Range)worksheet.Cells[1, 1]).EntireColumn.NumberFormat = "@";

for (int i = 1; i < DataGridView1.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = DataGridView1.Columns[i - 1].HeaderText;
}

for (int i = 0; i < DataGridView1.Rows.Count - 1; i++)
for (int j = 0; j < DataGridView1.Columns.Count; j++)
if (DataGridView1.Rows[i].Cells[j].Value == null)
worksheet.Cells[i + 2, j + 1] = "";
else
worksheet.Cells[i + 2, j + 1] = DataGridView1.Rows[i].Cells[j].Value.ToString();

workbook.SaveAs(save.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();
}

آقا خطا نمي گيره ولي هيچ چي هم نمي بره تو اكسل

shadi khanum
شنبه 29 بهمن 1390, 19:24 عصر
دوست عزیز اگه از گرید جانوس استفاده کنی خودش یه component داره به اسم GridExExporterکه به راحتی و با یه خط هرچیزی که تو گرید میبینی رو به فایل اکسل خروجی میده..
موفق باشی