Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Lớp MailMerge cung cấp hai sự kiện có thể rất hữu ích trong việc mở rộng khả năng Mail Merge. Thuộc tính setFieldMergingCallback(IFieldMergingCallback) chấp nhận một lớp thực hiện các phương thức fieldMerging(FieldMergingArgs) và imageFieldMerging(ImageFieldMergingArgs). Chúng có thể được sử dụng để thực hiện kiểm soát tùy chỉnh đối với quy trình Mail Merge.
Sự kiện fieldMerging(FieldMergingArgs) xảy ra trong Mail Merge khi gặp trường Mail Merge đơn giản trong tài liệu. Điều này cho phép kiểm soát thêm Mail Merge và bạn có thể thực hiện bất kỳ hành động nào khi sự kiện xảy ra. Phương thức này được bọc trong một lớp thực hiện giao diện IFieldMergingCallBack và chấp nhận một đối tượng FieldMergingArgs cung cấp dữ liệu cho sự kiện tương ứng.
Ví dụ mã được đưa ra dưới đây cho thấy cách triển khai logic tùy chỉnh trong sự kiện MergeField
để áp dụng định dạng ô.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public class ApplyCustomFormattingDuringMailMerge { | |
private static final String dataDir = Utils.getSharedDataDir(ApplyCustomFormattingDuringMailMerge.class) + "MailMerge/"; | |
public static void main(String[] args) throws Exception { | |
Document doc = new Document(dataDir + "MailMerge.AlternatingRows.doc"); | |
// Add a handler for the MergeField event. | |
doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldAlternatingRows()); | |
// Execute mail merge with regions. | |
DataTable dataTable = getSuppliersDataTable(); | |
doc.getMailMerge().executeWithRegions(dataTable); | |
doc.save(dataDir + "MailMerge.AlternatingRows Out.doc"); | |
} | |
/** | |
* Returns true if the value is odd; false if the value is even. | |
*/ | |
public static boolean isOdd(int value) throws Exception { | |
return (value % 2 != 0); | |
} | |
/** | |
* Create DataTable and fill it with data. In real life this DataTable | |
* should be filled from a database. | |
*/ | |
private static DataTable getSuppliersDataTable() throws Exception { | |
java.sql.ResultSet resultSet = createCachedRowSet(new String[]{"CompanyName", "ContactName"}); | |
for (int i = 0; i < 10; i++) | |
addRow(resultSet, new String[]{"Company " + Integer.toString(i), "Contact " + Integer.toString(i)}); | |
return new DataTable(resultSet, "Suppliers"); | |
} | |
/** | |
* A helper method that creates an empty Java disconnected ResultSet with | |
* the specified columns. | |
*/ | |
private static ResultSet createCachedRowSet(String[] columnNames) throws Exception { | |
RowSetMetaDataImpl metaData = new RowSetMetaDataImpl(); | |
metaData.setColumnCount(columnNames.length); | |
for (int i = 0; i < columnNames.length; i++) { | |
metaData.setColumnName(i + 1, columnNames[i]); | |
metaData.setColumnType(i + 1, java.sql.Types.VARCHAR); | |
} | |
CachedRowSet rowSet = RowSetProvider.newFactory().createCachedRowSet(); | |
; | |
rowSet.setMetaData(metaData); | |
return rowSet; | |
} | |
/** | |
* A helper method that adds a new row with the specified values to a | |
* disconnected ResultSet. | |
*/ | |
private static void addRow(ResultSet resultSet, String[] values) throws Exception { | |
resultSet.moveToInsertRow(); | |
for (int i = 0; i < values.length; i++) | |
resultSet.updateString(i + 1, values[i]); | |
resultSet.insertRow(); | |
// This "dance" is needed to add rows to the end of the result set properly. | |
// If I do something else then rows are either added at the front or the result | |
// set throws an exception about a deleted row during mail merge. | |
resultSet.moveToCurrentRow(); | |
resultSet.last(); | |
} | |
} | |
class HandleMergeFieldAlternatingRows implements IFieldMergingCallback { | |
/** | |
* Called for every merge field encountered in the document. We can either | |
* return some data to the mail merge engine or do something else with the | |
* document. In this case we modify cell formatting. | |
*/ | |
public void fieldMerging(FieldMergingArgs e) throws Exception { | |
if (mBuilder == null) | |
mBuilder = new DocumentBuilder(e.getDocument()); | |
// This way we catch the beginning of a new row. | |
if (e.getFieldName().equals("CompanyName")) { | |
// Select the color depending on whether the row number is even or odd. | |
Color rowColor; | |
if (ApplyCustomFormattingDuringMailMerge.isOdd(mRowIdx)) | |
rowColor = new Color(213, 227, 235); | |
else | |
rowColor = new Color(242, 242, 242); | |
// There is no way to set cell properties for the whole row at the moment, | |
// so we have to iterate over all cells in the row. | |
for (int colIdx = 0; colIdx < 4; colIdx++) { | |
mBuilder.moveToCell(0, mRowIdx, colIdx, 0); | |
mBuilder.getCellFormat().getShading().setBackgroundPatternColor(rowColor); | |
} | |
mRowIdx++; | |
} | |
} | |
public void imageFieldMerging(ImageFieldMergingArgs args) throws Exception { | |
// Do nothing. | |
} | |
private DocumentBuilder mBuilder; | |
private int mRowIdx; | |
} |
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.