استخدام العلامات الذكية
مقدمة
الجدول البياني للمصمم والعلامات الذكية
الجداول البيانية للمصمم هي ملفات Excel قياسية تحتوي على تنسيقات بصرية وصيغ وعلامات ذكية. يمكن أن تحتوي على علامات ذكية تشير إلى مصدر بيانات واحد أو أكثر، مثل المعلومات من مشروع ومعلومات لجهات اتصال ذات الصلة. تُكتب العلامات الذكية في الخلايا حيث ترغب في وضع المعلومات.
تبدأ جميع العلامات الذكية بـ &=. على سبيل المثال، علامة بيانات تحتوي على &=Party.FullName. إذا أسفرت علامة البيانات عن أكثر من عنصر واحد، على سبيل المثال صف كامل، فإن الصفوف التالية تنتقل تلقائيًا لتوفير المساحة للمعلومات الجديدة. بالتالي يمكن وضع المجاميع الفرعية والمجاميع على الصف الفوري بعد علامة البيانات لإجراء حسابات استنادًا إلى المعلومات المدخلة. لإجراء حسابات على الصفوف المدخلة، استخدم الصيغ الديناميكية.
تتكون العلامات الذكية من أجزاء مصدر البيانات واسم الحقل لمعظم المعلومات. قد يتم أيضًا تمرير معلومات خاصة باستخدام المتغيرات ومصفوفات المتغيّرات. تملأ المتغيّرات دائمًا خلية واحدة فقط بينما قد تملأ مصفوفات المتغيّرات عدة. استخدم فقط علامة بيانات واحدة لكل خلية. يتم إزالة العلامات الذكية غير المستخدمة.
يمكن أن تحتوي العلامة الذكية أيضًا على معلمات. تسمح المعلمات بتعديل كيفية ترتيب المعلومات. يتم إلحاقها بنهاية العلامة الذكية بين قوسين كقائمة مفصولة بفاصلة.
خيارات العلامة الذكية
&=مصدر البيانات.اسم الحقل &=[مصدر البيانات].[اسم الحقل] &=$اسم المتغير &=$مصفوفة_المتغيرات &==الصيغة_الديناميكية &=&=تكرار_الصيغة_الديناميكية
معلمات
يُسمح بالمعلمات التالية:
- noadd - عدم إضافة صفوف إضافية لتناسب البيانات.
- skip:n - تخطي n عدد من الصفوف لكل صف من البيانات.
- *ascending:n or descending:n - فرز البيانات في العلامات الذكية. إذا كان n يساوي 1، فإن العمود هو المفتاح الأول لجهاز الفرز. يتم فرز البيانات بعد معالجة مصدر البيانات. على سبيل المثال: &=Table1.Field3(ascending:1).
- أفقي - اكتب البيانات من اليسار إلى اليمين بدلاً من الأعلى إلى الأسفل.
- رقمي - تحويل النص إلى رقم إذا كان ذلك ممكنًا.
- تحريك - نقل البيانات إلى الأسفل أو اليمين، مما يؤدي إلى إنشاء صفوف أو أعمدة إضافية لاستيعاب البيانات. يعمل معلمة التحريك بنفس الطريقة كما هو الحال في مايكروسوفت إكسل. على سبيل المثال في مايكروسوفت إكسل، عند تحديد مجموعة من الخلايا، انقر بزر الماوس الأيمن وحدد إدراج وحدد تحريك الخلايا للأسفل، تحريك الخلايا يمينًا وغيرها من الخيارات. باختصار، تعمل معلمة التحريك على نفس النحو للعلامات الذكية الرأسية/العادية (من الأعلى إلى الأسفل) أو الأفقية (من اليسار إلى اليمين).
- فاصوليا - تُشير إلى أن مصدر البيانات هو POJO بسيط. مدعوم فقط في واجهة برمجة التطبيقات لجافا.
يمكن دمج المعلمات noadd و skip لإدراج البيانات في الصفوف المتناوبة. نظرًا لأن القالب يتم معالجته من الأسفل إلى الأعلى، يجب عليك إضافة noadd في الصف الأول لتجنب إدراج صفوف إضافية قبل الصف المتناوب.
إذا كان لديك معلمات متعددة، يجب فصلها بفاصلة، ولكن بدون مسافة: parameterA، parameterB، parameterC
تُظهر الصور التوضيحية التالية كيفية إدراج البيانات في كل صف آخر.
تتحول إلى…
الصيغ الديناميكية
تتيح الصيغ الديناميكية لك إدراج صيغ Excel في الخلايا حتى عندما تشير الصيغة إلى الصفوف التي سيتم إدراجها أثناء عملية التصدير. يمكن للصيغ الديناميكية أن تتكرر لكل صف تم إدراجه أو تستخدم فقط الخلية التي يتم وضع علامة البيانات فيها.
تسمح الصيغ الديناميكية بالخيارات الإضافية التالية:
- r - رقم الصف الحالي.
- 2، -1 - الإزاحة إلى رقم الصف الحالي.
توضح الصورة التالية صيغة ديناميكية متكررة والجدول الإكسل الناتج.
تحول إلى…
الخلية C1 تحتوي على الصيغة =A1B1، C2 تحتوي على = A2B2 و C3 = A3*B3.
من السهل جدًا معالجة العلامات الذكية. يوضح الكود المثال التالي كيفية استخدام الصيغ الديناميكية في العلامات الذكية. نقوم بتحميل ملف القالب وإنشاء بيانات اختبارية، ثم معالجة العلامات لملء البيانات في الخلايا مقابل العلامة.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(DynamicFormulas.class) + "SmartMarkers/"; | |
//set the file path of designer spreadsheet containing smart markers | |
String designerFile = dataDir + "templateDynamicFormulas.xlsx"; | |
// Create the relevant data listfor the AnswerData object | |
ArrayList<AnswerData> dataList = new ArrayList<>(); | |
dataList.add(new AnswerData(100.00, 2)); | |
dataList.add(new AnswerData(75.25, 3)); | |
dataList.add(new AnswerData(25.00, 5)); | |
if (designerFile != null) | |
{ | |
// Instantiating a WorkbookDesigner object | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Open a designer spreadsheet containing smart markers | |
designer.setWorkbook(new Workbook(designerFile)); | |
// Set the data source for the designer spreadsheet | |
designer.setDataSource("Answer", dataList); | |
// Process the smart markers | |
designer.process(); | |
} | |
public class AnswerData | |
{ | |
private double price; | |
private int amount; | |
public AnswerData(double priceValue, int amountValue) | |
{ | |
this.price = priceValue; | |
this.amount = amountValue; | |
} | |
public double getPrice() | |
{ | |
return price; | |
} | |
public void setPrice(double price) | |
{ | |
this.price = price; | |
} | |
public int getAmount() | |
{ | |
return amount; | |
} | |
public void setAmount(int amount) | |
{ | |
this.amount = amount; | |
} | |
} |
استخدام مصفوفات متغيرة
يوضح الكود المثال التالي كيفية استخدام مصفوفات متغيرة في العلامات الذكية. نقوم بوضع علامة مصفوفة متغيرة في الخلية A1 من الورقة العمل الأولى لدفتر العمل ديناميًا، والتي تحتوي على سلسلة من القيم التي نحددها للعلامة، ثم نقوم بمعالجة العلامات لملء البيانات في الخلايا مقابل العلامة. وأخيرًا، نقوم بحفظ ملف إكسل.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(UsingVariableArray.class) + "SmartMarkers/"; | |
// Instantiate a new Workbook designer. | |
WorkbookDesigner report = new WorkbookDesigner(); | |
// Get the first worksheet of the workbook. | |
Worksheet w = report.getWorkbook().getWorksheets().get(0); | |
/* | |
* Set the Variable Array marker to a cell.You may also place this Smart | |
* Marker into a template file manually in Ms Excel and then open this | |
* file via Workbook. | |
*/ | |
w.getCells().get("A1").putValue("&=$VariableArray"); | |
// Set the DataSource for the marker(s). | |
report.setDataSource("VariableArray", new String[] { "English", "Arabic", "Hindi", "Urdu", "French" }); | |
// Process the markers. | |
report.process(false); | |
// Save the Excel file. | |
report.getWorkbook().save(dataDir + "varaiblearray_out.xlsx"); |
تجميع البيانات
في بعض تقارير Excel قد تحتاج إلى تقسيم البيانات إلى مجموعات لجعلها أسهل قراءة وتحليل. أحد الأغراض الرئيسية لتقسيم البيانات إلى مجموعات هو تشغيل الحسابات (أداء عمليات ملخصية) على كل مجموعة من السجلات.
تسمح علامات Aspose.Cells الذكية بتجميع البيانات حسب الحقول المعينة ووضع صفوف ملخصية بين مجموعات البيانات أو المجموعات البيانية. على سبيل المثال، إذا تم تجميع البيانات حسب Customers.CustomerID، يمكنك إضافة سجل ملخصي في كل مرة يتغير فيها المجموعة.
معلمات
فيما يلي بعض معلمات العلامة الذكية المستخدمة لتجميع البيانات.
group:normal/merge/repeat
نحن ندعم ثلاثة أنواع من التجميع يمكنك الاختيار بينها.
- عادي - قيمة الحقل (أو الحقول) المجمعة لن تُكرر للسجلات المقابلة في العمود؛ بدلاً من ذلك، يتم طباعتها مرة واحدة لكل مجموعة من البيانات.
- دمج - نفس السلوك كما في المعلمة العادية، باستثناء أنها تدمج الخلايا في الحقل (أو الحقول) المجمعة لكل مجموعة محددة.
- تكرار - تُكرر قيمة الحقل (أو الحقول) المجمعة للسجلات المقابلة.
على سبيل المثال: &=Customers.CustomerID(group:merge)
skip
يتخطى عددًا محددًا من الصفوف بعد كل مجموعة.
على سبيل المثال &=Employees.EmployeeID(group:normal,skip:1)
subtotalN
يؤدي عملية ملخصية لبيانات حقل محددة متعلقة بحقل مجمعة. N يمثل الأرقام بين 1 و 11 التي تحدد الوظيفة المستخدمة عند حساب المجاميع الفرعية داخل قائمة البيانات. (1=متوسط، 2=عدد، 3=COUNTA، 4=MAX، 5=MIN، … 9=SUM إلخ.) راجع المرجع Subtotal في مساعدة Microsoft Excel لمزيد من التفاصيل.
التنسيق ينص بالفعل على: subTotalN:Ref حيث يشير Ref إلى العمود الذي يتم التجميع حسبه.
على سبيل المثال،
- &=Products.Units(subtotal9:Products.ProductID) يُحدد وظيفة الملخص عن حقل Units بالنسبة لحقل ProductID في جدول Products.
- &=Tabx.Col3(subtotal9:Tabx.Col1) يُحدد وظيفة الملخص عن حقل Col3 حسب Col1 في الجدول Tabx.
- &=Table1.ColumnD(subtotal9:Table1.ColumnA&Table1.ColumnB) يوضح وظيفة الملخص لحقل ColumnD مجموعة حسب ColumnA و ColumnB في الجدول Table1.
استخدام الكائنات المتداخلة
تدعم Aspose.Cells الكائنات المتداخلة في العلامات الذكية، يجب أن تكون الكائنات المتداخلة بسيطة.
نستخدم ملف قالب بسيط. انظر إلى جدول البيانات التصميمي الذي يحتوي على بعض العلامات الذكية المتداخلة.
الصفحة العمل الأولى في ملف التصميم تظهر العلامات الذكية المتداخلة.
المثال التالي يوضح كيفية عمل هذا. تشغيل الكود أدناه يؤدي إلى النتيجة أدناه.
الصفحة العمل الأولى في ملف الإخراج تظهر البيانات الناتجة.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(UsingNestedObjects.class) + "SmartMarkers/"; | |
Workbook workbook = new Workbook(dataDir + "TestSmartMarkers.xlsx"); | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
designer.setWorkbook(workbook); | |
ArrayList<Individual> list = new ArrayList<Individual>(); | |
list.add(new Individual("John", 23, new Wife("Jill", 20))); | |
list.add(new Individual("Jack", 25, new Wife("Hilly", 21))); | |
list.add(new Individual("James", 26, new Wife("Hally", 22))); | |
list.add(new Individual("Baptist", 27, new Wife("Newly", 23))); | |
designer.setDataSource("Individual", list); | |
designer.process(false); | |
workbook.save(dataDir + "UsingNestedObjects_out.xlsx"); |
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
public class Individual { | |
private String m_Name; | |
private int m_Age; | |
private Wife m_Wife; | |
public Individual(String name, int age, Wife wife) { | |
this.m_Name = name; | |
this.m_Age = age; | |
this.m_Wife = wife; | |
} | |
public String getName() { | |
return m_Name; | |
} | |
public int getAge() { | |
return m_Age; | |
} | |
public Wife getWife() { | |
return m_Wife; | |
} | |
} |
استخدام قائمة عامة ككائن متداخل
تدعم Aspose.Cells الآن أيضًا استخدام قائمة عامة ككائن متداخل. يرجى التحقق من لقطة شاشة من ملف إكسيل الناتج الذي تم إنشاؤه باستخدام الكود التالي. كما يمكنك رؤية في لقطة الشاشة كائن المعلم يحتوي على العديد من الكائنات الطالبة المتداخلة.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(UsingGenericList.class) + "SmartMarkers/"; | |
// Create a designer workbook | |
Workbook workbook = new Workbook(); | |
Worksheet worksheet = workbook.getWorksheets().get(0); | |
worksheet.getCells().get("A1").putValue("Teacher Name"); | |
worksheet.getCells().get("A2").putValue("&=Teacher.Name"); | |
worksheet.getCells().get("B1").putValue("Teacher Age"); | |
worksheet.getCells().get("B2").putValue("&=Teacher.Age"); | |
worksheet.getCells().get("C1").putValue("Student Name"); | |
worksheet.getCells().get("C2").putValue("&=Teacher.Students.Name"); | |
worksheet.getCells().get("D1").putValue("Student Age"); | |
worksheet.getCells().get("D2").putValue("&=Teacher.Students.Age"); | |
// Apply Style to A1:D1 | |
Range range = worksheet.getCells().createRange("A1:D1"); | |
Style style = workbook.createStyle(); | |
style.getFont().setBold(true); | |
style.setForegroundColor(Color.getYellow()); | |
style.setPattern(BackgroundType.SOLID); | |
StyleFlag flag = new StyleFlag(); | |
flag.setAll(true); | |
range.applyStyle(style, flag); | |
// Initialize WorkbookDesigner object | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Load the template file | |
designer.setWorkbook(workbook); | |
ArrayList<Teacher> list = new ArrayList<>(); | |
// Create the relevant student objects for the Teacher object | |
ArrayList<Person> students = new ArrayList<>(); | |
students.add(new Person("Chen Zhao", 14)); | |
students.add(new Person("Jamima Winfrey", 18)); | |
students.add(new Person("Reham Smith", 15)); | |
// Create a Teacher object | |
Teacher h1 = new Teacher("Mark John", 30, students); | |
// Create the relevant student objects for the Teacher object | |
students = new ArrayList<>(); | |
students.add(new Person("Karishma Jathool", 16)); | |
students.add(new Person("Angela Rose", 13)); | |
students.add(new Person("Hina Khanna", 15)); | |
// Create a Teacher object | |
Teacher h2 = new Teacher("Masood Shankar", 40, students); | |
// Add the objects to the list | |
list.add(h1); | |
list.add(h2); | |
// Specify the DataSource | |
designer.setDataSource("Teacher", list); | |
// Process the markers | |
designer.process(); | |
// Autofit columns | |
worksheet.autoFitColumns(); | |
// Save the Excel file. | |
designer.getWorkbook().save(dataDir + "UsingGenericList_out.xlsx"); |
package AsposeCellsExamples.SmartMarkers; | |
import java.util.ArrayList; | |
public class Teacher extends Person { | |
public Teacher(String name, int age, ArrayList<Person> students) { | |
super(name, age); | |
// TODO Auto-generated constructor stub\ | |
m_Students = students; | |
} | |
private ArrayList<Person> m_Students; | |
public ArrayList<Person> getStudents() { | |
return m_Students; | |
} | |
} |
package AsposeCellsExamples.SmartMarkers; | |
public class Person { | |
private String m_Name; | |
private int m_Age; | |
public Person(String name, int age) { | |
this.m_Name = name; | |
this.m_Age = age; | |
} | |
public String getName() { | |
return m_Name; | |
} | |
public int getAge() { | |
return m_Age; | |
} | |
} |
استخدام خاصية HTML للعلامات الذكية
The following sample code explains the use of the HTML property of the Smart Markers. When it will be processed, it will show “World” in “Hello World” as bold because of HTML <b> tag.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(UsingHTMLProperty.class) + "SmartMarkers/"; | |
Workbook workbook = new Workbook(); | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
designer.setWorkbook(workbook); | |
workbook.getWorksheets().get(0).getCells().get("A1").putValue("&=$VariableArray(HTML)"); | |
designer.setDataSource("VariableArray", | |
new String[] { "Hello <b>World</b>", "Arabic", "Hindi", "Urdu", "French" }); | |
designer.process(); | |
workbook.save(dataDir + "UHProperty-out.xls"); |
الحصول على إشعارات أثناء دمج البيانات باستخدام العلامات الذكية
في بعض الأحيان، قد يكون من الضروري الحصول على الإشعارات حول مرجع الخلية أو العلامة الذكية المعينة التي يتم معالجتها قبل الانتهاء. يمكن تحقيق هذا باستخدام الخاصية WorkbookDesigner.CallBack و ISmartMarkerCallBack.
للحصول على رمز عينة وشرح مفصل، يرجى رؤية هذه المقالة.