PDA

View Full Version : سوال: ایراد در نوشتن کد برای اکسل



aminpprog
دوشنبه 21 اسفند 1391, 10:40 صبح
سلام به دوستان عزیز :
من در حال نوشتن کد برای مدیریت فایل های اکسل هستم ولی بعضی وقت ها خطایی که در شکل زیر قرار دادم رو از من میگیره .
علتش از چی میتونه باشه ؟ :ناراحت::ناراحت::ناراحت:

101241

aminpprog
دوشنبه 21 اسفند 1391, 11:25 صبح
:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه:

کسی بلد نیست ؟


:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه:

csharpdoost
دوشنبه 21 اسفند 1391, 11:40 صبح
پیغامت که میگه یا فرمت قدیمیه و یا دیتای ورودی صحیح نیست. توی این خط چیکار میخوای بکنی؟ من که با کدهای دیگه به اکسل متصل میشم و کارهام رو باهاش انجام میدم.


object mis = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application ExcelAppbarnameh = new Microsoft.Office.Interop.Excel.Application();

ExcelAppbarnameh.Visible = false;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

Microsoft.Office.Interop.Excel.Application ExcelApp_110 = new Microsoft.Office.Interop.Excel.Application();

ExcelApp_110.Visible = false;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");


//باز کردن برنامه اصلی
Workbook workbook_barnameh = ExcelAppbarnameh.Workbooks.Open(FileName_barnameh, mis, mis, mis, mis, mis,
mis, mis, mis, mis, mis, mis, mis, mis, mis);
Sheets sheetsbarnameh = workbook_barnameh.Worksheets;

//باز کردن برنامه کدها
Workbook workbook110 = ExcelApp_110.Workbooks.Open(FileName110, mis, mis, mis, mis,
mis, mis, mis, mis, mis, mis, mis, mis, mis, mis);
Sheets sheets110 = workbook110.Worksheets;

aminpprog
دوشنبه 21 اسفند 1391, 12:42 عصر
آخه این ایرادی که از من گرفته تنها موردی که در بالا معرفی کردم نیست .
همین کدی که شما به من دادید رو هم در خط Workbooks.Open خطای Exception میگیره .
کلا با (mis) ها و (Open) ها مشکل داره !!!

aminpprog
دوشنبه 21 اسفند 1391, 13:42 عصر
اون طور که خود سی شارپ میگه ظاهرا رفرنس Microsoft.Office.Interop.Excel قدیمیه .

ولی من هر 2 مورد Microsoft.Office.Interop.Excel 11 و Microsoft.Office.Interop.Excel 12
و حتی از سربرگ COM گزینه Microsoft.Excel.Object.Library رو که علاوه بر رفرنس Interop شامل Office.Core هم هست رو امتحان کردم
ولی بازهم همون پیغام رو میده ! :متفکر: :عصبانی++::متفکر::عصبانی++:

البته این رو هم بگم که آفیسی رو که من نصب کردم 2007 هستش و جدیده .

csharpdoost
دوشنبه 21 اسفند 1391, 14:35 عصر
مهم نیست . آفیس من هم 2007 هستش. ببین عزیزمن روال کار اینطوریه : 1- بعد از باز شدن پروژه ات توی رفرنسها Microsoft.Office.Interop.Excel 12 رو اضافه کن. 2- توی usingها هم اضافه کن.
بعدش هم کدهای زیر :
به ترتیب :


public partial class Form1 : Form
{

Range range_radif1;

Worksheet worksheetbarname, worksheet110;


بعدش وجود فایل اکسل رو چک کنه:


if (System.IO.File.Exists(textBox1.Text))
FileName_barnameh = textBox1.Text;

دست آخر هم کدهایی که تو پست بالا نوشتم.

توصیه میکنم اول یه پروژه جدید ایجاد کن و همین روال رو توی اون تست کن.

aminpprog
دوشنبه 21 اسفند 1391, 16:40 عصر
دوست عزیز منظورت از textbox ی که نوشتی چیه ؟
اگه منظورت دریافت مسیر فایل (فایل اکسل) از کاربر هست که من هم دقیقا همون کار رو کردم ، اما اگه منظورت چیز دیگه ایه لطفا بگو تا اونو تصحیح کنم .

باز هم همون آش و همون کاسه !!!
(از متد Open و پارامتر های اون -mis ها- ایراد میگیره)

HAMID484
دوشنبه 21 اسفند 1391, 19:47 عصر
دوست عزیز من ی کد از نت پیدا کردم که باهاش یک دیتاگرید ویو رو انتقال میدم به اکسل . واسه من درست کار میکنه شاید بعضی قسمت هاش بدردت بخوره



public static void sendToExcel(DataGridView dataGridView1)
{

System.Threading.Thread.CurrentThread.CurrentCultu re =
new System.Globalization.CultureInfo("en-US");

// creating Excel Application

Microsoft.Office.Interop.Excel._Application app =
new Microsoft.Office.Interop.Excel.Application();


// creating new WorkBook within Excel application

Microsoft.Office.Interop.Excel._Workbook workbook =
app.Workbooks.Add(Type.Missing);



// creating new Excelsheet in workbook

Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

// see the excel sheet behind the program

app.Visible = true;


// get the reference of first sheet. By default its name is Sheet1.

// store its reference to worksheet

worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook .Sheets["Sheet1"];
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook .ActiveSheet;


// changing the name of active sheet

worksheet.Name = "Exported from gridview";


// storing header part in Excel

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


// storing Each row and column value to excel sheet

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

for (int j = 0; j < dataGridView1.Columns.Count; j++)
{

worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}

aminpprog
دوشنبه 21 اسفند 1391, 20:25 عصر
داداش دست نازنینت درد نکنه . باور کن 3 یا 4 روزی بود که منو درگیر کرده بود ؛ خدا خیرتو بده .
چون می دونم چجوری تشکر کنم (یه دونه تشکر برات ثبت کردم) ، نمی نویسم "نمی دونم چجوری ازت تشکر کنم" وگرنه می نوشتم !!! :تشویق::تشویق::تشویق:

حالا که زحمت کشیدی اگه امکان داره ، لطفا اینم برام بگو که چطوری می تونم به یه فایل اکسل از قبل موجود ، دسترسی پیدا کنم (با انواع روش هایی که از متد Open استفاده می کنه استفاده کردم ولی پیغام خطای Exception میگیرم -تصویر موجود در پست اول-) .

keyvan_tachra
یک شنبه 30 تیر 1392, 12:10 عصر
خط اول با این شروع بشه حله


System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

mahdi_7610
یک شنبه 30 تیر 1392, 16:28 عصر
دوست عزیز من ی کد از نت پیدا کردم که باهاش یک دیتاگرید ویو رو انتقال میدم به اکسل . واسه من درست کار میکنه شاید بعضی قسمت هاش بدردت بخوره



public static void sendToExcel(DataGridView dataGridView1)
{

System.Threading.Thread.CurrentThread.CurrentCultu re =
new System.Globalization.CultureInfo("en-US");

// creating Excel Application

Microsoft.Office.Interop.Excel._Application app =
new Microsoft.Office.Interop.Excel.Application();


// creating new WorkBook within Excel application

Microsoft.Office.Interop.Excel._Workbook workbook =
app.Workbooks.Add(Type.Missing);



// creating new Excelsheet in workbook

Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

// see the excel sheet behind the program

app.Visible = true;


// get the reference of first sheet. By default its name is Sheet1.

// store its reference to worksheet

worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook .Sheets["Sheet1"];
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook .ActiveSheet;


// changing the name of active sheet

worksheet.Name = "Exported from gridview";


// storing header part in Excel

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


// storing Each row and column value to excel sheet

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

for (int j = 0; j < dataGridView1.Columns.Count; j++)
{

worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}



سلام
من هم از این کد استفاده می کنم.
اطلاعات را توی اکسل می ریزه .
اما مشکلی که داره توی خط اخر error میده.
http://upload7.ir/images/38660946790639235852.jpg (http://upload7.ir/)