ورود

View Full Version : وارد کردن اطلاعات از اکسل



persiangulf83
یک شنبه 17 مرداد 1389, 09:50 صبح
با سلام
من يك برنامه الگوريتم فرا ابتكاري SA دارم كه با دلفي نوشته شده و براي حل مسأله بايد اطلاعات زيادي را از اكسل وارد كنم كه خيلي زمان ميبره اگه ميشه راهنمايي كنيد من چجوري اين اطلاعات را از اكسل وارد دلفي كنم. من از دلفي چيز زيادي نميدونم متأسفانه اون كسي هم كه اين برنامه را نوشت در اين مورد آگاهي نداشت

با تشكر

baran_2005
یک شنبه 17 مرداد 1389, 11:08 صبح
دقیقا منظورتون متوجه نشدم که می خواین از اطلاعات اکسل در دلفی استفاده کنید یا اطلاعات به بانک دلفی منتقل کنید ؟
کد زیر اطلاعات به بانکی که شما نتصل هستید وارد میکند همین طور با تغییر کد می تونید اطلاعات سلولهای اکسل بخوانید .



function ReadExcelFile(AFileName: string): Boolean;
var XLApp : OleVariant ;
begin
XLApp := CreateOLEObject('Excel.Application') ;
wb := XLApp.Workbooks.open(FileName) ;
Sheet := wb.WorkSheets[1];
nametable:=Sheet.Name;
with tadoquary.create (nil) begin
for i :=0 to ERow do begin
append;
for j := 0 to ECol do begin
Fields.Fields [j].Value := ( wb.WorkSheets[1].Cells[i+1,j+1]) ;
end;
post;
end;
XLApp.Visible := false ;
end;

persiangulf83
یک شنبه 17 مرداد 1389, 13:04 عصر
با تشكر.
من يك فايل اكسل دارم با چند sheet مختلف كه در آنها براي چند مدل مسأله عدد تصادفي توليد كردم بايد هر كدام از اينها را وارد دلفي كنم و جواب بگيرم. منظورم اين بود. اين كد را ميتونم به كدي كه الان دارم اضافه كنم؟؟ روي فرن چه دكمه اي بايد اضافه بشه؟
مرسي




دقیقا منظورتون متوجه نشدم که می خواین از اطلاعات اکسل در دلفی استفاده کنید یا اطلاعات به بانک دلفی منتقل کنید ؟
کد زیر اطلاعات به بانکی که شما نتصل هستید وارد میکند همین طور با تغییر کد می تونید اطلاعات سلولهای اکسل بخوانید .



function ReadExcelFile(AFileName: string): Boolean;
var XLApp : OleVariant ;
begin
XLApp := CreateOLEObject('Excel.Application') ;
wb := XLApp.Workbooks.open(FileName) ;
Sheet := wb.WorkSheets[1];
nametable:=Sheet.Name;
with tadoquary.create (nil) begin
for i :=0 to ERow do begin
append;
for j := 0 to ECol do begin
Fields.Fields [j].Value := ( wb.WorkSheets[1].Cells[i+1,j+1]) ;
end;
post;
end;
XLApp.Visible := false ;
end;

vcldeveloper
یک شنبه 17 مرداد 1389, 13:11 عصر
می تونید از طریق ADO مثل یک بانک اطلاعاتی معمولی به فایل Excel تون متصل بشید. هر Sheet در این حالت حکم یک جدول رو پیدا میکنه، و هر ستون هم میشه فیلد جدول. در اون صورت، خواندن داده ها مثل خواندن داده ها از بانک اطلاعاتی هست، نیازی هم به نصب بودن MS Excel روی سیستم کاربر نیست.

برای این منظور؛ برای AdoConnection تون، Provider را Microsoft JET 4.0 OLE DB Driver انتخاب کنید، و در تب All از پنجره Data Link Properties، مقدار خصوصیت Extended Properties را بر روی Excel 8.0 تنظیم کنید، و در تب Connection، به جای Database name، نام فایل Excel خودتون رو بدید.

persiangulf83
یک شنبه 17 مرداد 1389, 13:23 عصر
اگه امكان دارد يه خورده واضح تر توضيح بديد ممنون ميشم اين AdoConnetcion تو دلفي هستش؟
من نتونستم پيدا كنم متأسفانه من تودلفي يه خيلي ابتدايي هستم آخه
مرسي



می تونید از طریق ADO مثل یک بانک اطلاعاتی معمولی به فایل Excel تون متصل بشید. هر Sheet در این حالت حکم یک جدول رو پیدا میکنه، و هر ستون هم میشه فیلد جدول. در اون صورت، خواندن داده ها مثل خواندن داده ها از بانک اطلاعاتی هست، نیازی هم به نصب بودن MS Excel روی سیستم کاربر نیست.

برای این منظور؛ برای AdoConnection تون، Provider را Microsoft JET 4.0 OLE DB Driver انتخاب کنید، و در تب All از پنجره Data Link Properties، مقدار خصوصیت Extended Properties را بر روی Excel 8.0 تنظیم کنید، و در تب Connection، به جای Database name، نام فایل Excel خودتون رو بدید.

vcldeveloper
یک شنبه 17 مرداد 1389, 13:42 عصر
اگه امكان دارد يه خورده واضح تر توضيح بديد ممنون ميشم اين AdoConnetcion تو دلفي هستش؟
من نتونستم پيدا كنم متأسفانه من تودلفي يه خيلي ابتدايي هستم آخه
از اینجا یک نمونه پروژه در این رابطه دانلود کنید:
http://www.barnamenevis.org/forum/downloads.php?do=file&id=107003

Modernidea
پنج شنبه 15 مهر 1389, 23:43 عصر
دقیقا منظورتون متوجه نشدم که می خواین از اطلاعات اکسل در دلفی استفاده کنید یا اطلاعات به بانک دلفی منتقل کنید ؟
کد زیر اطلاعات به بانکی که شما نتصل هستید وارد میکند همین طور با تغییر کد می تونید اطلاعات سلولهای اکسل بخوانید .



function ReadExcelFile(AFileName: string): Boolean;
var XLApp : OleVariant ;
begin
XLApp := CreateOLEObject('Excel.Application') ;
wb := XLApp.Workbooks.open(FileName) ;
Sheet := wb.WorkSheets[1];
nametable:=Sheet.Name;
with tadoquary.create (nil) begin
for i :=0 to ERow do begin
append;
for j := 0 to ECol do begin
Fields.Fields [j].Value := ( wb.WorkSheets[1].Cells[i+1,j+1]) ;
end;
post;
end;
XLApp.Visible := false ;
end;

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

devil00x
شنبه 17 مهر 1389, 08:38 صبح
دوست عزیز راه حل رو که آقای کشاورز فرمودند چرا از این راه استفاده نمی کنی خیلی راحت و کاربردیه!
منم از همچین راهی استفاده کردم و جواب گرفتم خیلی راحت.

Modernidea
دوشنبه 19 مهر 1389, 11:32 صبح
عرض کردم که به دلایلی نمیتونم از کامپوننت استفاده کنم.
جهت اطلاع دوستان دیگر که شاید این مشکل رو داشته باشن
من از این سایت استفاده کردم : http://www.swissdelphicenter.ch/torry/showcode.php?id=379

vcldeveloper
دوشنبه 19 مهر 1389, 12:11 عصر
عرض کردم که به دلایلی نمیتونم از کامپوننت استفاده کنم.
در اون کد شما از شی COM مربوط به Excel استفاده کردید. این یعنی برنامه شما وابسته به نصب بودن MS Excel روی سیستم کاربر هست. از طرف دیگه، ADO در واقع خودش چیزی نیست جز یک سری رابط های مبتنی بر COM، پس اگر واقعا، به هر دلیلی، نمی خواستید از کامپوننت های دلفی استفاده کنید، می تونستید مستقیما با شی COM مربوط به ADO ارتباط برقرار کنید، و همون کاری که کامپوننت های dbGO دلفی انجام میدند، را با آن انجام بدید. مزیتش هم این بود که هم داده دریافتی همچون یک recordset بانک اطلاعاتی در اختیار شما قرار می گرفت، و هم به نصب MS Excel وابسته نمی شدید.

Modernidea
دوشنبه 19 مهر 1389, 23:58 عصر
درسته، این روش وابسته به نصب بودن اکسل است، اما روش دیگری هم در همون صفحه گفته شده که وابسته به اکسل نیست.
اما ای کاش همین رو زودتر میگفتید !

یعنی COM یک نوع کامپوننت است؟

vcldeveloper
سه شنبه 20 مهر 1389, 15:56 عصر
یعنی COM یک نوع کامپوننت است؟
COM یک تکنولوژی ارتباطی شی گرا در سکوی ویندوز هست. به اشیائی که از این طریق با سایر نرم افزارها به اشتراک گذاشته میشه، کامپوننت های COM گفته میشه. اینها کامپوننت های دلفی نیستید، ولی مفهوم کلی کامپوننت در هر دوی آنها وجود داره. دلفی میتونه به طور خودکار از کامپوننت های COM ویندوز، کامپوننت دلفی تولید کنه.

khoshblagh
دوشنبه 26 مهر 1389, 12:00 عصر
می تونید از طریق ADO مثل یک بانک اطلاعاتی معمولی به فایل Excel تون متصل بشید. هر Sheet در این حالت حکم یک جدول رو پیدا میکنه، و هر ستون هم میشه فیلد جدول. در اون صورت، خواندن داده ها مثل خواندن داده ها از بانک اطلاعاتی هست، نیازی هم به نصب بودن MS Excel روی سیستم کاربر نیست.

برای این منظور؛ برای AdoConnection تون، Provider را Microsoft JET 4.0 OLE DB Driver انتخاب کنید، و در تب All از پنجره Data Link Properties، مقدار خصوصیت Extended Properties را بر روی Excel 8.0 تنظیم کنید، و در تب Connection، به جای Database name، نام فایل Excel خودتون رو بدید.
اگر قرار باشد که مشخصات فوق را در زمان اجرای برنامه به AdoConnection ست کرد کد مربوطه را به چه شکل باید نوشت؟ متشکرم.

vcldeveloper
دوشنبه 26 مهر 1389, 12:44 عصر
اگر قرار باشد که مشخصات فوق را در زمان اجرای برنامه به AdoConnection ست کرد کد مربوطه را به چه شکل باید نوشت؟
تمام اون مراحل حاصلش میشه یک ConnectionString. اون ConnectionString رو کپی کنید، در کدتون هر جا خواستید، ازش استفاده کنید، یا به هر شکلی که خواستید، تغییرش بدید.

khoshblagh
دوشنبه 26 مهر 1389, 12:56 عصر
تمام اون مراحل حاصلش میشه یک ConnectionString. اون ConnectionString رو کپی کنید، در کدتون هر جا خواستید، ازش استفاده کنید، یا به هر شکلی که خواستید، تغییرش بدید.

با تشکر از جناب آقای کشاورز
مشکل من اینه که نام فایل اکسل دریافتی در زمان اجرای برنامه ممکن است تغییر نماید. لذا در زمان دریافت فایل میبایست اول نسبت به تغییر نام اقدام و سپس کانکشن را فعال گردد.

vcldeveloper
دوشنبه 26 مهر 1389, 16:56 عصر
مشکل من اینه که نام فایل اکسل دریافتی در زمان اجرای برنامه ممکن است تغییر نماید. لذا در زمان دریافت فایل میبایست اول نسبت به تغییر نام اقدام و سپس کانکشن را فعال گردد.
دوست عزیز، در پست قبل توضیح دادم، اما دقت نکردید.
یک بار اون مراحل رو برید، یک ConnectionString به دست میاد. ConnectionString از اسمش هم پیدا ست، یک string هست، حالا در اون ConnectionString اونجایی که به اسم و مسیر فایل اشاره شده، اون رو تغییر بدید به مسیر و اسم فایل مورد نظرتون.

Modernidea
یک شنبه 22 اسفند 1389, 20:01 عصر
از اینجا یک نمونه پروژه در این رابطه دانلود کنید:
http://www.barnamenevis.org/forum/downloads.php?do=file&id=107003

من هر وقتی کلیک میکنم روی این لینک، توی صفجه ای که باز میشه میگه شما لاگین نکردید، درصورتی که من لاگین هستم، وقتی هم از همونجا لاگین میکتم بازم میگه لاگین نکردید !

Modernidea
یک شنبه 22 اسفند 1389, 20:47 عصر
می تونید از طریق ADO مثل یک بانک اطلاعاتی معمولی به فایل Excel تون متصل بشید. هر Sheet در این حالت حکم یک جدول رو پیدا میکنه، و هر ستون هم میشه فیلد جدول. در اون صورت، خواندن داده ها مثل خواندن داده ها از بانک اطلاعاتی هست، نیازی هم به نصب بودن MS Excel روی سیستم کاربر نیست.

برای این منظور؛ برای AdoConnection تون، Provider را Microsoft JET 4.0 OLE DB Driver انتخاب کنید، و در تب All از پنجره Data Link Properties، مقدار خصوصیت Extended Properties را بر روی Excel 8.0 تنظیم کنید، و در تب Connection، به جای Database name، نام فایل Excel خودتون رو بدید.


کارهایی که شما گفتید رو انجام دادم.
چه از ADOTable و چه از ADOQuery که استفاده میکنم، وقتی که میخوام Activate کنم پیغام میده که Syntax مشکل داره. مشکل از نام جدولش هست. نام جدول ها را که از طریق ADOTable نگاه کردم اینجوری بود "Sheet2$" به همین علامت $ گیره. وقتیم که برش میدارم میگه که اصلا همچین جدولی وجود نداره.

مشکل از کجاست؟

vcldeveloper
یک شنبه 22 اسفند 1389, 21:20 عصر
چه از ADOTable و چه از ADOQuery که استفاده میکنم، وقتی که میخوام Activate کنم پیغام میده که Syntax مشکل داره. مشکل از نام جدولش هست. نام جدول ها را که از طریق ADOTable نگاه کردم اینجوری بود "Sheet2$" به همین علامت $ گیره. وقتیم که برش میدارم میگه که اصلا همچین جدولی وجود نداره.

از AdoTable استفاده کنید، و خصوصیت TableDirect اون رو True کنید.


من هر وقتی کلیک میکنم روی این لینک، توی صفجه ای که باز میشه میگه شما لاگین نکردید، درصورتی که من لاگین هستم، وقتی هم از همونجا لاگین میکتم بازم میگه لاگین نکردید !
Upload Center سایت بعد از ارتقاء نرم افزار سایت از کار افتاده.

Modernidea
یک شنبه 22 اسفند 1389, 23:54 عصر
تشکر (http://www.glockwood.co.uk/ComputingResources/Howtos/exceltodelphi.pdf)،

راهی برای استفاده از Query نیست؟
یعنی باید داده هام رو بریزم تو یک جدول از یک بانک اطالاعاتی مثل Access و ازش Query بگیرم؟