এজন্য আপনাকে একটি গুগল অ্যাপস স্ক্রিপ্ট লিখতে হবে । আপনি স্প্রেডশিটের প্রথম সারিটি ক্ষেত্রের নাম হতে দিতে এবং ক্ষেত্রগুলি যেমন উল্লেখ করা হয় সেখানে একটি টেম্পলেট নথি তৈরি করতে পারেন [FIELD]
।
সুতরাং আপনার স্প্রেডশিটটি যদি এমন দেখাচ্ছে:
NAME | STREET | ZIP | TOWN
---------------------------------------------
Vidar | Karl Johans gate 15 | 0200 | Oslo
John | 3021 Arlington Road | 123456 | Memphis, TN
... আপনার মতো টেম্পলেট নথি থাকতে পারে
প্রিয় [NAME], [STREET] এ বসবাস করছেন, [TOWN] [জিপ] ...
আপনার স্ক্রিপ্টে একটি নতুন, খালি ডকুমেন্ট তৈরি করতে হবে এবং আপনার স্প্রেডশিটে প্রতিটি সারির জন্য একটি নতুন পৃষ্ঠা যুক্ত করুন এবং সারি মান সহ ক্ষেত্রের স্থানধারীদের সন্ধান / প্রতিস্থাপন করতে হবে।
আমার কিছুটা কার্যকরী সংস্করণ রয়েছে, যার জন্য কিছুটা মসৃণতা লাগতে পারে। এটি এখানে অনুরোধ করা যেতে পারে । এটি মেল মার্জের ফলাফল হিসাবে নতুন একটি নথি তৈরি করবে ।
আপনি এটি নিজের স্ক্রিপ্টের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন। আপনি যদি এটিতে থাকেন তবে আমাকে জানান, বা স্ক্রিপ্টটি শেষ করতে আমি আরও কিছুটা সময় ব্যয় করতে পারি।
স্ক্রিপ্ট সামগ্রী:
var selectedTemplateId = null;
var selectedSpreadsheetId = null;
var spreadsheetDocPicker = null;
var templateDocPicker = null;
function mailMerge(app) {
var app = UiApp.createApplication().setTitle("Mail Merge");
templateDocPicker = createFilePicker(app, "Choose template",
UiApp.FileType.DOCUMENTS, "templateSelectionHandler");
templateDocPicker.showDocsPicker();
return app;
};
function createFilePicker(app, title, fileType, selectionHandlerName) {
Logger.log("Creating file picker for " + fileType);
var docPicker = app.createDocsListDialog();
docPicker.setDialogTitle(title);
docPicker.setInitialView(fileType);
var selectionHandler = app.createServerHandler(selectionHandlerName);
docPicker.addSelectionHandler(selectionHandler);
return docPicker;
}
function templateSelectionHandler(e) {
var app = UiApp.getActiveApplication();
selectedTemplateId = e.parameter.items[0].id;
UserProperties.setProperty("templateId", e.parameter.items[0].id);
Logger.log("Selected template: " + selectedTemplateId);
var spreadsheetDocPicker = createFilePicker(app, "Choose spreadsheet",
UiApp.FileType.SPREADSHEETS, "spreadsheetSelectionHandler");
spreadsheetDocPicker.showDocsPicker();
return app;
}
function spreadsheetSelectionHandler(e) {
var app = UiApp.getActiveApplication();
UserProperties.setProperty("spreadsheetId", e.parameter.items[0].id);
selectedSpreadsheetId = e.parameter.items[0].id;
Logger.log("Selected spreadsheet: " + selectedSpreadsheetId);
doMerge();
return app;
}
function doMerge() {
var selectedSpreadsheetId = UserProperties.getProperty("spreadsheetId");
var selectedTemplateId = UserProperties.getProperty("templateId");
Logger.log("Selected spreadsheet: " + selectedSpreadsheetId);
var sheet = SpreadsheetApp.openById(selectedSpreadsheetId);
Logger.log("Spreadsheet opened");
Logger.log("Opening template: " + selectedTemplateId);
var template = DocumentApp.openById(selectedTemplateId);
Logger.log("Template opened");
var templateFile = DocsList.getFileById(selectedTemplateId);
var templateDoc = DocumentApp.openById(templateFile.getId());
//var mergedFile = templateFile.makeCopy();
var mergedDoc = DocumentApp.create("Result of mail merge");
var bodyCopy = templateDoc.getActiveSection().copy();
Logger.log("Copy made");
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var fieldNames = values[0];
for (var i = 1; i < numRows; i++) {
var row = values[i];
Logger.log("Processing row " + i + " " + row);
var body = bodyCopy.copy();
for (var f = 0; f < fieldNames.length; f++) {
Logger.log("Processing field " + f + " " + fieldNames[f]);
Logger.log("Replacing [" + fieldNames[f] + "] with " + row[f]);
body.replaceText("\\[" + fieldNames[f] + "\\]", row[f]);
}
var numChildren = body.getNumChildren();
for (var c = 0; c < numChildren; c++) {
var child = body.getChild(c);
child = child.copy();
if (child.getType() == DocumentApp.ElementType.HORIZONTALRULE) {
mergedDoc.appendHorizontalRule(child);
} else if (child.getType() == DocumentApp.ElementType.INLINEIMAGE) {
mergedDoc.appendImage(child);
} else if (child.getType() == DocumentApp.ElementType.PARAGRAPH) {
mergedDoc.appendParagraph(child);
} else if (child.getType() == DocumentApp.ElementType.LISTITEM) {
mergedDoc.appendListItem(child);
} else if (child.getType() == DocumentApp.ElementType.TABLE) {
mergedDoc.appendTable(child);
} else {
Logger.log("Unknown element type: " + child);
}
}
Logger.log("Appending page break");
mergedDoc.appendPageBreak();
Logger.log("Result is now " + mergedDoc.getActiveSection().getText());
}
}
function testMerge() {
UserProperties.setProperty("templateId",
"1pAXWE0uklZ8z-O_Tejuv3pWSTiSv583ptUTGPt2Knm8");
UserProperties.setProperty("spreadsheetId",
"0Avea1NXBTibYdFo5QkZzWWlMYUhkclNSaFpRWUZOTUE");
doMerge();
}
function doGet() {
return mailMerge();
}