نمایش نتایج 1 تا 21 از 21

نام تاپیک: 2excel

  1. #1

    2excel

    چطور می شه اطلاعات sql server رو تو دلفی مشاهده کرد و بعد به excel فرستاد چه componet هایی نیازه.

  2. #2
    سلام
    برای اتصال با بانک و مشاهده اطلاعات می تونید درباره ado, data access,data control در سایت جستجو نمایید.و برای ارسال اطلاعات به اکسل هم میتونید از کامپوننت های max استفاده نمایید.برای مشاهده اینجا کلیک کنید.دو کامپوننت TmxExports و TmxNativeExcel داده های شما را از dataset و dbgrid و.... به word و excel و.... منتقل میکند.

  3. #3
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    سلام
    کامپوننت نمیدونم داره یا نه. ولی من کدشو نوشتم. اگه بخوای بهت میدم

  4. #4
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    شرمنده من سرعتم پایینه. هرکاری میکنم کد آپ نمیشه.
    سعی می کنم ظرف یکی دو روز برات آپ کنم.

  5. #5
    سلام
    من خودم هم همین سوال را داشتم که یه کامپوننت بهم معرفی کردند که بسیا ر هم عالی به اکسل export می کنه
    اسمش را دقیقا یادم نیست ولی یه سرچی تو سایت بزنی پیداش مکنی

  6. #6
    کاربر دائمی آواتار babak869
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    کرمانشاه
    پست
    1,251
    میتونید از کامپوننت EMS Export یا Advanced Export Component استفاده کنید

  7. #7
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321

    Post

    سلام
    این کدی هست که من نوشتم:
    procedure ExportToExcel(ADO: TADOTable; ExcelApp: TExcelApplication);
    var
    Template: OleVariant;
    S: String;
    CRec, CField: Integer;
    begin{1}
    Template := 'C:\Template.xlt';
    with ExcelApp do
    begin{2}
    Connect;
    Caption := 'Export';
    Workbooks.Add(Template, 0);
    ADO.First;
    for CField := 0 to ADO.FieldCount - 1 do
    begin{3}
    S := ADO.Fields[CField].DisplayLabel;
    Range[char(CField+65) + '1',char(CField+65) + '1'].Select;
    ActiveCell.FormulaR1C1 := S;
    end;{4}
    for CRec := 1 to ADO.RecordCount do
    begin{5}
    for CField := 0 to ADO.FieldCount - 1 do
    begin{6}
    S := ADO.Fields[CField].AsString;
    Range[char(CField+65)+ IntToStr(CRec+1),char(CField+65)+ IntToStr(CRec+1)].Select;
    ActiveCell.FormulaR1C1 := S;
    end;{6}
    ADO.Next;
    end;{5}
    Cells.Select;
    Cells.EntireColumn.AutoFit;
    Cells.EntireRow.AutoFit;
    Range['A1','A1'].Select;
    end;{2}
    end;{1}
    این یه پرویسجره که فایل پارامترهای ورودیش نام جدوله از نوع ADOTable تعریف کردم. اگه بخواید می تونید اونو از نوع ADOQuery تعریف کنید.

    اگه خواستید از نوع کوئری تعریف کنید این رو به جای خط اول بذارید:
    procedure ExportToExcel(ADO: TADOQuery; ExcelApp: TExcelApplication);
    راستی یکی دیگه از ورودی هاش ExcelApp هست که باید یه دونه ExcelApplication از پانل Servers انتخاب کنید و روی فرم بذارید. بعد اسم اونو به عنوان پارامتر ارسال کنید به پروسیجر.
    نحوه استفاده:
      ExportToExcel(QueryOrTableName, ExcelApplication1);
    ایشالا که به دردتون بخوره.[/quote]

    یه نکته دیگه:
    باید یه فایل تمپلیت اکسل به اسم Template.xlt تو مسیر C:\ بسازید. کدی که من نوشتم میاد این فایل رو باز می کنه و یه New ازش می گیره و اطلاعات رو اونجا میریزه.
    برای ساختن این فایل برنامه اکسل رو باز کنید و یه قالب طراحی کرده و اون رو Save Az کنید. موقع Save Az کردن از اون پایین فرمت Temlate رو انتخاب کنید.
    آخرین ویرایش به وسیله پرواز : چهارشنبه 07 شهریور 1386 در 13:17 عصر دلیل: نحوه ساختن تمپليت رو فراموش كرده بودم توضيح بدم

  8. #8
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    آقا من یه دونه اصلاحیه نوشتم!!!

    در پست قبلی همون طور که می بینید احتیاج به قرار دادن ExcelApplication روی فرم وجود داره. این ممکنه یه کم دست و پا گیر باشه.

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

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

    uses ComObj;

    procedure ExportToExcel(ADO: TADOTable);
    var
    Template: OleVariant;
    ExcelApp: OleVariant;
    S: String;
    CRec, CField: Integer;
    begin{1}
    // Template := 'Z:\Talie\Template.xlt';
    Template := 'C:\Template.xlt';
    ExcelApp := CreateOleObject('Excel.Application');
    ExcelApp.Caption := 'Export';
    ExcelApp.Workbooks.Add(Template);
    ADO.First;
    for CField := 0 to ADO.FieldCount - 1 do
    begin{3}
    S := ADO.Fields[CField].DisplayLabel;
    ExcelApp.Range[char(CField+65) + '1',char(CField+65) + '1'].Select;
    ExcelApp.ActiveCell.FormulaR1C1 := S;
    end;{3}
    for CRec := 1 to ADO.RecordCount do
    begin{4}
    for CField := 0 to ADO.FieldCount - 1 do
    begin{5}
    S := ADO.Fields[CField].AsString;
    ExcelApp.Range[char(CField+65)+ IntToStr(CRec+1),char(CField+65)+ IntToStr(CRec+1)].Select;
    ExcelApp.ActiveCell.FormulaR1C1 := S;
    end;{5}
    ADO.Next;
    end;{4}
    ExcelApp.Cells.Select;
    ExcelApp.Cells.EntireColumn.AutoFit;
    ExcelApp.Cells.EntireRow.AutoFit;
    ExcelApp.Range['A1','A1'].Select;
    ExcelApp.Visible := True;
    end;{1}


    اگه نکته ای هست دوستان حتما مطرح کنند.
    سوالی هم داشتین بپرسین.

    موفق باشید.
    آخرین ویرایش به وسیله پرواز : سه شنبه 20 شهریور 1386 در 08:29 صبح دلیل: اضافه كردن uses به كد

  9. #9
    کاربر دائمی آواتار Valadi
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    فعلا در خدمت شما
    پست
    1,342
    جناب پرواز
    اگر امکان داره همین کد را بصورت یک مثال (سورس) بنویس

    موفق و پایدار باشی

  10. #10
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    نقل قول نوشته شده توسط Valadi مشاهده تاپیک
    جناب پرواز
    اگر امکان داره همین کد را بصورت یک مثال (سورس) بنویس

    موفق و پایدار باشی
    چشم جناب ولدی.

  11. #11
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    سلام.

    اینم یه سورس برای انتقال یک Table از بانک به اکسل.

    البته یه کم دیگه امکانات بهش اضافه کردم.
    اولا که برای تابع ExportToExcel توضیح فارسی (کامنت) گذاشتم که فهمش آسون بشه.
    ثانیاً امکان انتخاب فیلد و تعیین شرط برای فیلد های قابل نمایش اضافه شد.
    برای این کار اومدم از دستورات SQL استفاده کردم. سه تا Memo رو فرم اصلی داریم که اولی برای مقدار Select - دومی برای From و سومی برای Where می باشد.
    اینو گذاشتم که برنامه نویسای محترم بتونن هرجور که خواستن تو برنامشون استفاده کنن. (به جای Memo می تونید از یه متغییر استفاده کنید و مقدار رو توی اون ذخیره کنید).
    یه فرم دیگه هم طراحی کردم که توی اون میتونید فیلدهای مورد نظر خودتون رو انتخاب کنید و به طور اتوماتیک به Select اضافه کنید.


    نکته قابل توجه توی این برنامه اینه که شما برای انتقال به اکسل نام اصلی فیلد رو انتقال نمیدهید. اون چیزی که انتقال پیدا می کنه DisplayLabel هر فیلده که میتونه فارسی باشه.

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

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

    از همه شما دوستان می خوام که مشکلات و کمبودهاش رو گوشزد کنید و اگه امکانات جالب دیگه ای هم به ذهنتون می رسه بهش اضافه کنید و همینجا آپ کنید.
    اگه سؤال خاصی هم دارید مطرح کنید.

    امیدوارم که بدردتون بخوره (هر چند امکانات ناچیزی داره و قابل تأمل نیست)

    موفق باشید.
    فایل های ضمیمه فایل های ضمیمه

  12. #12
    کاربر دائمی آواتار Valadi
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    فعلا در خدمت شما
    پست
    1,342
    جناب پرواز
    بدردتون بخوره
    چرا بدرد نمی خوره خیلی هم بدرد می خوره خودتون دست کم نگیرید
    هر چند امکانات ناچیزی داره و قابل تأمل نیست
    این طورهم نیست

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

  13. #13
    کاربر جدید
    تاریخ عضویت
    دی 1385
    محل زندگی
    مشهد
    پست
    23
    راه حل ساده تر: با دستور write اطلاعات فایل sql را در یک فایل متنی با پسوند csv ثبت و فایل مورد نظر را در اکسل باز کنید. هیچ کامپوننتی هم نمیخواد. حدااکثر یک کد 20 خطی مشک را حل می کند.

  14. #14
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    جناب رضا
    اگه میشه زحمت بکشید کد و یا یه مثال از این روش رو آپلود کنید که ما و بقیه دوستان هم استفاده کنیم.

    موفق باشی.

  15. #15
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    راستی من یه نکته رو فراموش کردم بگم.
    تو سورسی که گذاشتم یه فایلت تمپلیت اکسل (.xlt) وجود داره که اگه اونو ویرایش کنید و فونت ها و رنگهاشو به سلیقه خودتون بسازید خروجی گزارشتون هم همون شکلی میشه.
    خوبیش اینه که در زمان اجرا و بدون احتیاج به کد نویسی می تونید شکل ظاهری گزارش رو ویرایش کنید.

  16. #16
    کاربر جدید
    تاریخ عضویت
    دی 1385
    محل زندگی
    مشهد
    پست
    23

    export to excel

    نقل قول نوشته شده توسط پرواز مشاهده تاپیک
    جناب رضا
    نقل قول نوشته شده توسط پرواز مشاهده تاپیک
    اگه میشه زحمت بکشید کد و یا یه مثال از این روش رو آپلود کنید که ما و بقیه دوستان هم استفاده کنیم.

    موفق باشی.
    procedure CreateExcel(jcFileName : String; QTemp: TDataSet);
    var FileTxt : TextFile;
    ji, i, j : Integer;
    jbCancel : Boolean;
    begin
    with SaveDialog1 do
    begin
    DefaultExt := 'CSV';
    Filter := '*.CSV';
    if Execute then
    begin
    if(FileExists(FileName))then
    Exit;
    j := QTemp.RecordCount;
    Screen.Cursor := CrHourglass;
    Try
    AssignFile(FileTxt, FileName);
    Rewrite(FileTxt);
    for ji:=0 to QTemp.FieldCount - 1 do
    Write(FileTxt, QTemp.Fields[ji].DisplayLabel ,';');
    Writeln(FileTxt,'');
    QTemp.First;
    i := 1;
    while (not QTemp.Eof) do
    begin
    for ji:=0 to QTemp.FieldCount - 1 do
    Write(FileTxt, '"' + QTemp.Fields[ji].AsString + '";');
    Writeln(FileTxt,'');
    QTemp.Next;
    Inc(i);
    end;
    CloseFile(FileTxt);
    Screen.Cursor := crDefault;
    Except
    Screen.Cursor := crDefault;
    end;
    end;
    end;
    end;
    آخرین ویرایش به وسیله reza1351 : جمعه 23 شهریور 1386 در 13:15 عصر دلیل: به تایپک 20# مراجعه شود.

  17. #17
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    مرسی آقا رضا.
    اگه کدها رو توی پنجره کد قرار بدی خیلی راحتتر خونده میشه.

    موفق باشی

  18. #18
    کاربر جدید
    تاریخ عضویت
    دی 1385
    محل زندگی
    مشهد
    پست
    23
    نقل قول نوشته شده توسط پرواز مشاهده تاپیک
    مرسی آقا رضا.
    اگه کدها رو توی پنجره کد قرار بدی خیلی راحتتر خونده میشه.

    موفق باشی
    چه جوری؟

  19. #19
    کاربر دائمی آواتار پرواز
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    321
    نقل قول نوشته شده توسط reza1351 مشاهده تاپیک
    چه جوری؟
    وقتی که پیام تایپ می کنی یه آیکون اون بالا هست به شکل # که اگه اونو بزنی و کدها رو بین دوعلامت ایجاد شده بذاری حله...

  20. #20
    کاربر جدید
    تاریخ عضویت
    دی 1385
    محل زندگی
    مشهد
    پست
    23
    نقل قول نوشته شده توسط پرواز مشاهده تاپیک
    وقتی که پیام تایپ می کنی یه آیکون اون بالا هست به شکل # که اگه اونو بزنی و کدها رو بین دوعلامت ایجاد شده بذاری حله...
    با تشکر قدرت خدا! اشکال اینجا بود که من کد داخل براکت را پاک میکردم بعد متن رو داخل براکت کپی میکردم واقعا که بعضی وقت ها ادم چه کارایی که نمی کنه.

    درضمن من برای اینکه بعضی از فیلدها در خروجی اکسل نشون داده نشه. tag فیلد را 1 میذارم و موقع تولید فایل فیلدهایی رو چاپ میکنم که tag آنها 1 نیست. شید بدرد شما هم بخورد.
    ضمنا با همین روش import از اکسل را هم نوشتم. البته یه مقدار ریزه کاری دارد ضمن اینکه بر اساس ساختار جدول بانک باید برنامه نوشت و نمیشه یک تابع کلی نوشت.

    procedure CreateExcel(jcFileName : String; QTemp: TDataSet);
    var FileTxt : TextFile;
    ji, i, j : Integer;
    jbCancel : Boolean;
    begin
    with SaveDialog1 do
    begin
    DefaultExt := 'CSV';
    Filter := '*.CSV';
    if Execute then
    begin
    if(FileExists(FileName))then
    Exit;
    j := QTemp.RecordCount;
    Screen.Cursor := CrHourglass;
    Try
    AssignFile(FileTxt, FileName);
    Rewrite(FileTxt);
    for ji:=0 to QTemp.FieldCount - 1 do
    Write(FileTxt, QTemp.Fields[ji].DisplayLabel ,';');
    Writeln(FileTxt,'');
    QTemp.First;
    i := 1;
    while (not QTemp.Eof) do
    begin
    for ji:=0 to QTemp.FieldCount - 1 do
    Write(FileTxt, '"' + QTemp.Fields[ji].AsString + '";');
    Writeln(FileTxt,'');
    QTemp.Next;
    Inc(i);
    end;
    CloseFile(FileTxt);
    Screen.Cursor := crDefault;
    Except
    Screen.Cursor := crDefault;
    end;
    end;
    end;
    end;


  21. #21

    Talking SaveSGToExcelFile

    ba salam bacheha bebakhshid ke fingilishi shod
    goftam ye seri code baraye bachehayi ke az bankaye etelaati sardar nemiyaran az jomle khodam bezaram ke betunan stringgrid ro dar excel zakhire konan omidvaram bedardetun bokhore

    function RefToCell(ARow, ACol: Integer): string;
    begin
    Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
    end;
    function SaveSGToExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
    const
    Worksheet = -4167;
    var
    XLApp, Sheet, Data: OLEVariant;
    i, j: Integer;
    begin
    Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
    for i := 0 to AGrid.ColCount - 1 do
    for j := 0 to AGrid.RowCount - 1 do
    Data[j + 1, i + 1] := AGrid.Cells[i, j];
    Result := False;
    XLApp := CreateOleObject('Excel.Application');
    try
    XLApp.Visible := False;
    XLApp.Workbooks.Add(WorkSheet);
    Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet.Name := ASheetName;
    Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
    AGrid.ColCount)].Value := Data;
    XLApp.Workbooks[1].SaveAs(AFileName);
    Result := True;
    finally
    if not VarIsEmpty(XLApp) then
    begin
    XLApp.DisplayAlerts := False;
    XLApp.Quit;
    XLAPP := Unassigned;
    Sheet := Unassigned;
    end;
    end;
    end;

    //example

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if SaveSGToExcelFile(stringGrid1, 'My Stringgrid Data', 'c:\Excel.xls') then
    ShowMessage('StringGrid saved!');
    end;




    faghat darmorede Function RefToCell ye tozihi bedam ke baraye taine Name Sotun ha dar excele A1,B1,...............

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •