PDA

View Full Version : کار با اکسل در سی شارپ



HDDSoft2001
دوشنبه 06 مهر 1388, 23:35 عصر
با سلام

دوستان من یه پروژه میخام بنویسم که توی اون قرار اطلاعات رو بافرمت خاصی از اکسل بخونم و در با فرمت خاصی در فایل ورود بنویسم. دوستان من تا حالا تجربه چنین کاری نداشتم اگه میشه کمکم کنید. در ضمن اگه کامپونت خاصی داره لطف کنید برام ادرشو بگید. خیلی ممنونم.



با تشکر

daniel_0247
دوشنبه 06 مهر 1388, 23:58 عصر
سلام !
خوب اگر شما تاپیک های قبلی رو یه نگاهی بیندازی ، مطالبی رو پیدا می کنی . در هر صورت
می تونی از لینک زیر که مطلب کاملی است استفاده کنی .

Exporting Data To Csv And Excel (http://www.codeproject.com/KB/aspnet/ExportClassLibrary.aspx)

____________________
My Blog (http://prohardcoding.blogfa.com/)

HDDSoft2001
شنبه 11 مهر 1388, 11:15 صبح
با سلام


درسته گشتم بد نبود ولی منو قانع نکرد چون نتونستم جواب بگیرم.


ببینید دوستان من یک برنامه می خوام بنویسم که یک فایل اکسل رو کاربر انتخاب کنه و خود کاربر بره و ادرس ستونی که قراره اعدادش با هم جمع زده بشه رو وارد کنه (ادرس ستون و ادرس سطر اول و سطر آخر).
راستش من کمی کیج شدم چون خود دات نت کلاس برای این کار فکر کنم داشته باشه ولی بعضی از دوستان با اکتیو ایکس فکر کنم کار کردن و دیگه اینگه از oledb (با کامندهاش) البته فکر کنم این هم یه راه باشه.
حالا بی خیال. دوستان اگه کسی هست فقط همین یک قسمت رو قشنگ برام توضیح بده منظورم با کده من خودم تا اخرش رو دنبال میکنم فط یکی یه قسمتشو بگه بقیش با من.
سعی کنید که از خود کلاس های دات نت هم استفاده شود ترجیحا.

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

در ضمن در مورد ورژن هم یه توضیحی بدهید.
و در آخر هم من میخام با دات نت 2 بنویسم. (به گمانم توضیحات تکمیلی دادم :لبخند:)
با تشکر

naeeme
شنبه 11 مهر 1388, 11:39 صبح
اگر از oledb استفاده کنید، خودش می فهمه که ستون مورد نظر شما از چه نوع داده‌ای هست( اگر توی اکسل از نوع general انتخاب نکرده باشند)
اما مشکل oledb این هست که دیگه نمی تونی شماره ستون بهش بدین، بلکه ستون های شما در سطر اول باید نام فیلد داشته باشند، و شما نام فیلدها رو مشخص کنین. همچنین نام جدول شما در واقع همون نام برگه هست. مثلا Sheet1.
برای اینکه کاربر شما نام فیلد رو مشخص کنه، شما می تونین ساختار فایل رو با یک دستور select که رکوردی بر نمی گردونه(‌مثلا در قسمت شرط بگزارید 1<>1) دربیارید و براساس اون نام ستون ها رو در یک کومبو یا چک لیست یا هرچیز دیگری نشون بدین و کاربر ستون مورد نظر خودش رو انتخاب کنه.
بقیهش هم که مثل کار با باقی پایگاه داده هاست.

این هم یه متد برای خوندن از فایل اکسل:



public static DataTable getData(string Path, string SheetName)
{
string strconstring =
string.Format(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;",
Path);

System.Data.OleDb.OleDbDataAdapter da =
new System.Data.OleDb.OleDbDataAdapter(
string.Format("select * from [{0}$] ", SheetName)
, strconstring);
DataTable dt = new DataTable();
try
{
da.Fill(dt);
}
catch (Exception ex)
{
if (da.SelectCommand.Connection.State != ConnectionState.Closed)
da.SelectCommand.Connection.Close();

MessageBox.Show(ex.Message + Environment.NewLine + "tableName= " + SheetName);
}

return dt;
}

HDDSoft2001
شنبه 11 مهر 1388, 17:03 عصر
با سلام


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

خلاصه من بازم منتظر جواب های شما هستم. (دوباره از دوست عزیزم بابت جوابشون خیلی ممنونم.)

در ضمن من خودم دارم یه ازمون هایی میکنم که مرتبا به خطای زیر بر می خورم این خطای چیه؟

Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

دستورات زیر این خطا رو داد هنوز هم هیچ کاری نکردم. (خط آخری خا میده)


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

app.Visible = true;

app.Workbooks.Add(Type.Missing);

HDDSoft2001
یک شنبه 12 مهر 1388, 21:49 عصر
با سلام

فکر کنم من یه 10 تا پست دیگه بزنم یکی یک نظری نمیده. بیشتر از اینها انتظار داشتم.:متفکر:

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

خطا :


Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))


کد باعث خطای بالا :


app = new Microsoft.Office.Interop.Excel.Application();
app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);


بابا یکی بیاد دیگه!


با تشکر

pars.engineer
دوشنبه 13 مهر 1388, 01:43 صبح
سلام
در Control Panel و در تنظیمات Regional And Languages زبان مورد نظر را En-US قرار دهید


موفق باشید

nemati2004
چهارشنبه 07 بهمن 1388, 16:41 عصر
سلام
یه سری به این ادرس بزن
http://support.microsoft.com/kb/302084#top

به این مطلب هم که داخل این صفحه اومده توجه کن شاید مشکلت این باشه.



Note Microsoft Office 2003 includes Primary Interop Assemblies (PIAs). Microsoft Office XP does not include PIAs,



but they can be downloaded. For more information about Office XP PIAs, click the following article number to


view the article in the Microsoft Knowledge Base



328912 (http://support.microsoft.com/kb/328912/) Microsoft Office XP primary interop assemblies (PIAs) are available for download


موفق باشی:تشویق:

Hirbod2007
دوشنبه 11 بهمن 1389, 16:24 عصر
این چند خط و قبل کدهات اضافه کن مشکل حل میشه
System.Globalization.CultureInfo oldci = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-us");

shamriz_farzad
سه شنبه 31 اردیبهشت 1392, 09:55 صبح
using Microsoft.Office.Interop.Excel;





this.openFileDialog1.FileName = "*.xls";

if (this.openFileDialog1.ShowDialog() == DialogResult.OK)

{

Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(

openFileDialog1.FileName, 0, true, 5,

"", "", true, Excel.XlPlatform.xlWindows, "\t", false, false,

0, true);

Excel.Sheets sheets = theWorkbook.Worksheets;

Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);

for (int i = 1; i <= 10; i++)

{

Excel.Range range = worksheet.get_Range("A"+i.ToString(), "J" + i.ToString());

System.Array myvalues = (System.Array)range.Cells.Value;

string[] strArray = ConvertToStringArray(myvalues);

}

}