الانتقال إلى المحتوى

تحويل مخرجات الريبورت الى excel file


ابن الجزيرة

Recommended Posts

أنا أستخدم حاليا ريبورت بيلدر الإصدارة رقم 6.0.5.35.0 اريد تحويل مخرجات الريبورت إلى excel file المشكلة هي أنه في هذه الإصدارة من الريبورت بيلدر يقوم بتكرار العنواني مع تكرار السطور . لدي طريقة لعمل ذلك لكنها معقد نوعا ما أريد طريقة بسيطة لعمل ذلك أو أي إجراء آخر ممكن عمله لوقف تكرار سطور العناوين

رابط هذا التعليق
شارك

Here's some code to dump the contents of a block into Excel. You may want to uncomment the commented-out sections if you want the functionality of being able to save the workbook that gets created. (I copied it a while back from this forum, so am not claiming any credit for it, or for the lack of readability!!)

PROCEDURE pr_Forms_to_Excel(p_block_name IN VARCHAR2 DEFAULT NAME_IN('system.current_block')) IS
-- Declare the OLE objects
application OLE2.OBJ_TYPE;
workbooks OLE2.OBJ_TYPE;
workbook OLE2.OBJ_TYPE;
worksheets OLE2.OBJ_TYPE;
worksheet OLE2.OBJ_TYPE;
cell OLE2.OBJ_TYPE;
range OLE2.OBJ_TYPE;
range_col OLE2.OBJ_TYPE;

-- Declare handles to OLE argument lists
args OLE2.LIST_TYPE;

-- Declare form and block items
form_name VARCHAR2(100);
f_block VARCHAR2(100);
l_block VARCHAR2(100);
f_item VARCHAR2(100);
l_item VARCHAR2(100);
cur_block VARCHAR2(100) := NAME_IN('system.current_block');
cur_item VARCHAR2(100) := NAME_IN('system.current_item');
cur_record VARCHAR2(100) := NAME_IN('system.cursor_record');
item_name VARCHAR2(100);
baslik VARCHAR2(100);
row_n NUMBER;
col_n NUMBER;
filename VARCHAR2(100);
BEGIN
-- Start Excel
application:=OLE2.CREATE_OBJ('Excel.Application');
OLE2.SET_PROPERTY(application, 'Visible', 'True');

-- Return object handle to the Workbooks collection
workbooks:=OLE2.GET_OBJ_PROPERTY(application, 'Workbooks');

-- Add a new Workbook object to the Workbooks collection
workbook:=OLE2.GET_OBJ_PROPERTY(workbooks,'Add');

-- Return object handle to the Worksheets collection for the Workbook
worksheets:=OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets');

-- Get the first Worksheet in the Worksheets collection
-- worksheet:=OLE2.GET_OBJ_PROPERTY(worksheets,'Add');
args:=OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(args, 1);
worksheet:=OLE2.GET_OBJ_PROPERTY(worksheets,'Item',args);
OLE2.DESTROY_ARGLIST(args);

-- Return object handle to cell A1 on the new Worksheet
go_block(p_block_name);
baslik := get_block_property(p_block_name,FIRST_ITEM);
f_item := p_block_name||'.'||get_block_property(p_block_name,FIRST_ITEM);
l_item := p_block_name||'.'||get_block_property(p_block_name,LAST_ITEM);
first_record;
LOOP
item_name := f_item;
row_n := NAME_IN('SYSTEM.CURSOR_RECORD');
col_n := 1;
LOOP
IF get_item_property(item_name,ITEM_TYPE)<>'BUTTON' AND
get_item_property(item_name,VISIBLE)='TRUE'
THEN
-- Set first row with the item names
IF row_n=1 THEN
baslik:=NVL(get_item_property(item_name,PROMPT_TEXT),baslik);
args:=OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(args, row_n);
OLE2.ADD_ARG(args, col_n);
cell:=OLE2.GET_OBJ_PROPERTY(worksheet, 'Cells', args);
OLE2.DESTROY_ARGLIST(args);
OLE2.SET_PROPERTY(cell, 'Value', baslik);
OLE2.RELEASE_OBJ(cell);
END IF;
-- Set other rows with the item values
args:=OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(args, row_n+1);
OLE2.ADD_ARG(args, col_n);
cell:=OLE2.GET_OBJ_PROPERTY(worksheet, 'Cells', args);
OLE2.DESTROY_ARGLIST(args);
IF get_item_property(item_name,DATATYPE)<>'NUMBER' THEN
OLE2.SET_PROPERTY(cell, 'NumberFormat', '@');
END IF;
OLE2.SET_PROPERTY(cell, 'Value', name_in(item_name));
OLE2.RELEASE_OBJ(cell);
END IF;
IF item_name = l_item THEN
exit;
END IF;
baslik := get_item_property(item_name,NEXTITEM);
item_name := p_block_name||'.'||get_item_property(item_name,NEXTITEM);
col_n := col_n + 1;
END LOOP;
EXIT WHEN NAME_IN('system.last_record') = 'TRUE';
NEXT_RECORD;
END LOOP;

-- Autofit columns
range := OLE2.GET_OBJ_PROPERTY( worksheet,'UsedRange');
range_col := OLE2.GET_OBJ_PROPERTY( range,'Columns');
OLE2.INVOKE( range_col,'AutoFit' );
OLE2.RELEASE_OBJ( range );
OLE2.RELEASE_OBJ( range_col );
/*
-- Get filename and path
args := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG( args, p_block_name );
OLE2.ADD_ARG( args,'Excel Workbooks (*.xls, *.xls');
filename := OLE2.INVOKE_CHAR( application,'GetSaveAsFilename',args );
OLE2.DESTROY_ARGLIST( args );
*/
/*
-- Save as worksheet
IF NVL(filename,'0')<>'0' THEN
args := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG( args,filename );
OLE2.INVOKE( worksheet,'SaveAs',args );
OLE2.DESTROY_ARGLIST( args );
END IF;
*/
-- Close workbook
--OLE2.INVOKE( workbook ,'Close');

-- Release the OLE objects
OLE2.RELEASE_OBJ(worksheet);
OLE2.RELEASE_OBJ(worksheets);
OLE2.RELEASE_OBJ(workbook);
OLE2.RELEASE_OBJ(workbooks);
--OLE2.INVOKE(application, 'Quit');
OLE2.RELEASE_OBJ(application);

-- Focus to the original location
go_block(cur_block);
go_record(cur_record);
go_item(cur_block||'.'||cur_item);
END; 

منقول من :
http://forums.oracle.com/forums/forum.jsp?forum=82

رابط هذا التعليق
شارك

السلام عليكم
راجع هذه الوصلات وستجد بها شرح بالصورة.
ولا تنسوا الدعوات

http://www.oracle.com/technology/products/...el/viewlet.html

http://forums.oracle.com/forums/thread.jsp...art=0&trange=15

رابط هذا التعليق
شارك

شكرا جزيلا لكم وشكر خاص للأخ M_fighter ليس في الموضوع بخل ولا شيء ولكن كنت مشغول جد ا

الطريق تتلخص ياشباب في أنه لمنع التكرار نضع الheadings في reapeating frame مبني على أساس sql statment تقوم بإرجاع سطر واحد فقط ونستخدم فيها الجدول dual يعني إذا كان عندي headings أو عنواين مثل location ,employee name ,employee salary أكتب ال sql statment بهذا الشكل

select 'location','employee name','employee salary' from dual

وعندما أختار ال source حق ال repeating frame أختار هذي الsql statment حيث سيكون عدد الأسطر المرجعة سطر واحد فقط .

بعده ننشي الحقول داخل الrepeating frame ويكون الsource حقها الأعمدة التي أخترناها في الsql statment ولكي يسبق حقل حقل أخر وتكون في نفس العمود في الexcel sheet يجب أن تكون كل الحقول فوق بعض وتبدأ من نفس المكان ونفس حجم الطول والإرتفاع ولكي تضهر في نفس السطر يعني يجب أن يكون كل واحد جنب الثاني ونفس حجم الطول والإرتفاع ولا يكون واحد أعلى من الثاني لن الexcel سيعتبر أنه سطر جديد

هذا هو الhelp الموجود في الreport builder

Delimited output enables you to specify a delimiter (a character or string of characters) to separate the data in your report output. Using this feature, you can create report output that is easily imported into spreadsheet utilities, such as Microsoft Excel.
You can specify the delimiter in either of the following ways:

n on the command line via the DELIMITER parameter.

n in the Delimited Output dialog box via the Delimiter option. Note that this dialog box is only available in the US English version of Report Builder Release 6.0.

When you generate delimited output, you can further distinguish the cells by using a cell wrapper. A cell wrapper can consist of any series of characters, such as a comma or parentheses.

For example, if the data in your report output include the same character as the delimiter (e.g. a comma), you can use the parentheses cell wrapper to distinguish each cell:

(1,000,000),(3,6000),(543),(2,003,500)…

Usage Notes

When you generate delimited output, the data displays according to the positions of the objects in the Layout Model view.

If you place A above or to the left of B (where A and B are any boilerplate or field objects, Report Builder displays each instance of A before each instance of B in every line of output.
When you generate delimited output, the data displays according to the positions of the objects in the Layout Model view.

n If you place A above or to the left of B (where A and B are any boilerplate or field objects, Report Builder displays each instance of A before each instance of B in every line of output.



If you create a frame that contains a boilerplate object (A) and encloses a repeating frame that contains a field object (:D, each instance of A displays with each instance of B.



In the previous layout, if you add another frame that contains a boilerplate object © and encloses another repeating frame that contains a field object (D), A displays for every instance of B, and then C displays for every instance of D.



If you create a matrix in your report, be sure to align your objects carefully according to the grid in the Layout Model view. If the objects are not aligned, Report Builder may interpret the extra space as an extra row or column and disrupt your report output.

If you create a boilerplate object outside of a matrix, each instance of the boilerplate repeats with every row (not column) of the matrix. Note that boilerplates contained in the matrix will not be repeated will field objects outside of the matrix.

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله
شكرا لكم كثيرا لهذه المشاركة الفعالة .
شكرا للأخ / m_fighter على عرض الcode
مشاركتى بسيطه جدا وهى انشاء ال form فقط للمستخدم scott/tiger
ونأمل من الأخ / أبن الجزيرة وضع التقرير الخاص به لتعم الفائدة على الجميع وشكرا له مقدما ..
مرفق الform

PR_FORMS_TO_EXCEL.fmb

رابط هذا التعليق
شارك

يا شباب ماأرغب فيه هو تحويل الريبورت نفسه بنفس التنسيق الموجود فيه إلى أكسل شيت . تعلمون أنه من الممكن أن يكون الout put حق الريبورت على شكل pdf file أو html أو word . الذي أرغب فيه أنا أن يكون مخرجات الريبورت على شكل excel sheet . الطريقة التي أستخدمه أنني أضع الlables في repeating fram يعتمد على query الناتج حقه سطر واحد فقط مثل

select * from dual

فهذا الquery الأخير يمنع تكرار العناوين الذي يحصل عادة عندما نقوم بجعل مخرجات الريبورت على شكل exel sheet وهذ الطريقة متعبة وتأخذ الكثير من الوقت إذا كان عندك عدد كبير من ال lables لأنك ستظطر لجعل كل label لديك في repeating fram كما أنه أحيانا قد لا تنجح هذه الطريقة اذا كان الريبورت معقد

ياليت اللي عنده طريقة أبسط يرشدنا للطريقة شاكرا لكم تفاعلكم ومعلوماتكم القيمة

رابط هذا التعليق
شارك

  • بعد 5 شهور...

السلام عليكم ورحمة الله وبركاته

هل يوجد طريقة اخرى مباشرة لحل هذا الموضوع
مع DEVELOPER 6 i
حيث لدى تقرير من مصفوفه Matrix واريد وضعه فى ملف Excel
وعدد الاعمدة قد يتجاوز الصفحة الواحدة ( عرضيا )

شكرا مقدما

رابط هذا التعليق
شارك

  • بعد 1 شهر...

الاخ /امجد

اشكرك على الملف ولكن هل ممكن وضع اكثر من بلك على نفس الاكسل شيت لاني حاولت التعديل ولكن كل بلك طلع في ملف مستقل

تحياتي
اللهم صل على سيدنا محمد وعلى ال سيدنا محمد

رابط هذا التعليق
شارك

الاخ الكريم
يوجد برنامج يسهل عليك كل المعاناة وما عليك سوى كتابة جملة ال sql في البرنامج ثم يظهر لك البيانات وتقدر تصديرها الى excel
اسم البرنامج query report
تستطيع انزاله من الرابط التالي
http://www.allroundautomations.com/queryreporter.html

وتستطيع استخدام toad ليقوم بالمهمه

رابط هذا التعليق
شارك

اخي العزيز لك الشكر الجزيل ولكن الطريقه المذكوره في حالة كان المستخدم هو المبرمج ولكن ما اريده هو اعطاء المستخدم النهائي هذه التقارير ليحولها للاكسل من خلال الفورم او التقرير

ولك جزيل الشكر

رابط هذا التعليق
شارك

أخي الكريم توجد طريقة قد قرأتها في أوراكل 10 تلقائياً تعطيك هذه الميزة تلقائياً ،،
طبعاً للعميل وليس للمبرمج .
وسوف أحاول أن أضع الرابط الخاص بها .
http://www.oracle.com/webapps/dialogue/dlg...=3302697&Act=14

رابط هذا التعليق
شارك

وهذا هو الشرح بالتفصيل الممل مع الصور قم بالنقر على العدسة لتوضيح الصور :
طبعاً إشترك أولاً في الموقع (الإشتراك مجاني) ثم تصفحها :

http://www.oracle.com/technology/obe/obe10...mldb/htmldb.htm

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله ,,

يمكنك استخراج التقرير فى شكل html اولا
ثم من المتصفح.... وباستخدام المفتاح الايمن لل mouse فى المتصفح .. يمكن تحويلة فى شكل ملف execl

المطلوب عند تصميم التقرير ان يكون هناك محاذاه افقيه للحقول المتشابهة على سطر واحد
وايضا مطلوب تنسيق رأسى للاعمدة المتشابهة .

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...
  • بعد 8 شهور...

الرد متخر لكن عناد بشارك

هناك طريقتين
الاولى:
ان تجعل بعد كل عمود من الاعمدة الخارجة في التقرير علامة ^

ثانيا من PARAMETER تقوم باظهار التالي:
DISTYPE وتقوم باختيار FILE
DISNAME تحدد مكان الحفظ مثلا c:\emp_jobs_descr.txt
DISFORMAT الى WIDE500 في حالة التقارير العريضة والا اجعله كماهو
MODE الى CHARACTER
وتقوم بتغيير خصائص التقرير بحيث يسمح لقراءته على شكل CHARACTER وتزيد في عرض التقرير

وتقوم بتشغيل التقرير بالطريقة السابقة ويظهر لك شاشة الطباعة لكنه سيطبعه الى ملف ليس الى طابعة لذلك لا تخف

الان اذهب الى الاكسل وقم باختيار فتح ملف واختر النوع ملفات نصية وقم بقتح الملف الذي قمت بحفظه ستظهر لك شاشة خيارات اختر محدد واضغط على التالي من المحددات اختر غير ذلك وقم بوضع علامة ^ ستجد انه وضع بدل علامة ^ اعمدة واضغط على انهاء ستجد تقريرك الذي قمت بعمله بالاوراكل على الاكسل

الطريقة الثانية
برنامج اسمه PAPERLESS PRINTER يقوم بطباعة اي ملف او اي تقرير على الاكسل وعدة خيارات اخرى وهو يعمل كطابعة اي تنسى جميع الخطوات السابقة وتشغل التقرير عادي جدا اختر ملف ثم طباعة ستجد انه تم اضافة طابعة جديدة باسم البرنامج والباقي بسيط جدا ولو هناك اي استفسارات انا موجود

رابط هذا التعليق
شارك

الرد متخر لكن عناد بشارك

هناك طريقتين
الاولى:
ان تجعل بعد كل عمود من الاعمدة الخارجة في التقرير علامة ^

ثانيا من PARAMETER تقوم باظهار التالي:
DISTYPE وتقوم باختيار FILE
DISNAME تحدد مكان الحفظ مثلا c:\emp_jobs_descr.txt
DISFORMAT الى WIDE500  في حالة التقارير العريضة والا اجعله كماهو
MODE الى CHARACTER
وتقوم بتغيير خصائص التقرير بحيث يسمح لقراءته على شكل CHARACTER وتزيد في عرض التقرير

وتقوم بتشغيل التقرير بالطريقة السابقة ويظهر لك شاشة الطباعة لكنه سيطبعه الى ملف ليس الى طابعة لذلك لا تخف

الان اذهب الى الاكسل وقم باختيار فتح ملف واختر النوع ملفات نصية وقم بقتح الملف الذي قمت بحفظه ستظهر لك شاشة خيارات اختر محدد واضغط على التالي من المحددات اختر غير ذلك وقم بوضع علامة ^ ستجد انه وضع بدل علامة ^ اعمدة واضغط على انهاء ستجد تقريرك الذي قمت بعمله بالاوراكل على الاكسل

الطريقة الثانية
برنامج اسمه PAPERLESS PRINTER يقوم بطباعة اي ملف او اي تقرير على الاكسل وعدة خيارات اخرى وهو يعمل كطابعة اي تنسى جميع الخطوات السابقة وتشغل التقرير عادي جدا اختر ملف ثم طباعة ستجد انه تم اضافة طابعة جديدة باسم البرنامج والباقي بسيط جدا ولو هناك اي استفسارات انا موجود

68132[/snapback]



السلام عليكم أخي الكريم,
اذا ممكن تنزل نموذج تقرير مضاف الى أعمدته هذه الحركة ^
أكون شاكرة,
رابط هذا التعليق
شارك

معليش على التأخير

لو افترضنا انك راح تستعلمين مثلا عن جدول الموظفين راح يكون طريقة الاستعلام بالشكل هذا

select emp_id,'^', emp_name_l
from employee



بحيث ان العلامة ^ تكون بعد كل عمود من الاعمدة ليتم فصل الاعمدة عن بعضها في التقرير والنتيجة را تكون بالشكل التالي

emp_id  ^  emp_name_l



سكون كل سجل بهذا الشكل وبالنسبة لارفاق تقرير من المصعب لان الجداول مختلفة فكيف سيعمل التقرير وآسف على التاخير

رابط هذا التعليق
شارك

  • بعد 13 سنة...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية