Tutorial: Working with Smart Markers in Excel using Aspose.Cells Cloud API
Prerequisites
Before starting this tutorial, make sure you have:
- An Aspose Cloud account with an active subscription or free trial
- Your Client ID and Client Secret from the Aspose Cloud Dashboard
- Basic understanding of REST API concepts
- Familiarity with Excel templates and XML data formats
- Basic knowledge of your preferred programming language
Understanding Smart Markers
Smart Markers are a powerful feature in Aspose.Cells that allow you to create dynamic Excel templates with placeholders that get replaced with actual data. This template-based approach offers several advantages:
- Separation of design and data: Design experts can create visually appealing templates while programmers focus on data
- Consistency: Maintain a consistent look and feel across all generated reports
- Efficiency: Quickly generate multiple reports from a single template
- Flexibility: Handle various data structures, including lists, tables, and nested data
Smart Markers are represented in Excel templates as specially formatted text within cells, following a specific syntax that defines where and how data should be populated.
1. Creating a Smart Marker Template
Let’s start by understanding how to create an Excel template with Smart Markers.
Smart Marker Syntax
Smart Markers follow this general syntax:
&=DataSource.PropertyName
Where:
&=
is the Smart Marker prefixDataSource
identifies the data source (like a dataset name).PropertyName
specifies the property or field to use from that data source
Example Template
Let’s create a simple sales report template:
- Open Excel and create a new workbook
- In cell A1, enter “Monthly Sales Report”
- In cell A3, enter “Month:”
- In cell B3, enter “&=Report.Month” (this is a Smart Marker)
- In cell A4, enter “Year:”
- In cell B4, enter “&=Report.Year” (another Smart Marker)
- In cell A6, enter “Product”
- In cell B6, enter “Category”
- In cell C6, enter “Units Sold”
- In cell D6, enter “Revenue”
- In cell A7, enter “&=SalesData.ProductName”
- In cell B7, enter “&=SalesData.Category”
- In cell C7, enter “&=SalesData.UnitsSold”
- In cell D7, enter “&=SalesData.Revenue”
- Save the file as “sales_template.xlsx”
This template contains Smart Markers for both single values (Month and Year) and a data collection (SalesData).
2. Preparing XML Data
Smart Markers work with XML data. Let’s create a sample XML file that matches our template:
<?xml version="1.0" encoding="utf-8"?>
<Data>
<Report>
<Month>January</Month>
<Year>2023</Year>
</Report>
<SalesData>
<ProductName>Widget A</ProductName>
<Category>Hardware</Category>
<UnitsSold>120</UnitsSold>
<Revenue>2400</Revenue>
</SalesData>
<SalesData>
<ProductName>Widget B</ProductName>
<Category>Hardware</Category>
<UnitsSold>85</UnitsSold>
<Revenue>1700</Revenue>
</SalesData>
<SalesData>
<ProductName>Software Suite</ProductName>
<Category>Software</Category>
<UnitsSold>45</UnitsSold>
<Revenue>4500</Revenue>
</SalesData>
<SalesData>
<ProductName>Cloud Services</ProductName>
<Category>Services</Category>
<UnitsSold>10</UnitsSold>
<Revenue>1000</Revenue>
</SalesData>
</Data>
Save this as “sales_data.xml”.
3. Processing Smart Markers with Aspose.Cells Cloud API
Now, let’s use the Aspose.Cells Cloud API to process this template with the XML data.
Try It Yourself: Processing a Smart Marker Template
Follow these steps to process the template:
- Upload both the template and XML data files to your cloud storage
- Make the API request to process the Smart Markers
- Download and view the generated report
Using cURL
curl -X POST "https://api.aspose.cloud/v3.0/cells/sales_template.xlsx/smartmarker?xmlFile=sales_data.xml" \
-H "accept: application/json" \
-H "authorization: Bearer YOUR_ACCESS_TOKEN"
SDK Examples
Python
# Tutorial Code Example - Processing Smart Markers
import asposecellscloud
from asposecellscloud.apis.cells_api import CellsApi
from asposecellscloud.models import *
from asposecellscloud.requests import *
# Configure authentication
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
api = CellsApi(client_id, client_secret)
# Specify file names
template_file = "sales_template.xlsx"
xml_file = "sales_data.xml"
output_file = "generated_report.xlsx"
# First, upload both files to cloud storage (if not already there)
# For template:
upload_request = UploadFileRequest(path=template_file, file=template_file)
api.upload_file(upload_request)
# For XML data:
upload_request = UploadFileRequest(path=xml_file, file=xml_file)
api.upload_file(upload_request)
# Now, process the Smart Markers
request = PostWorkbookGetSmartMarkerResultRequest(
name=template_file,
xml_file=xml_file,
out_path=output_file
)
# Execute the request
response = api.post_workbook_get_smart_marker_result(request)
# Download the generated file
download_request = DownloadFileRequest(path=output_file)
response = api.download_file(download_request)
# Save the file locally
with open(output_file, 'wb') as f:
f.write(response)
print(f"Report generated successfully and saved as {output_file}")
Java
// Tutorial Code Example - Processing Smart Markers
import com.aspose.cells.cloud.api.CellsApi;
import com.aspose.cells.cloud.model.*;
import com.aspose.cells.cloud.request.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
public class SmartMarkerProcessor {
public static void main(String[] args) {
try {
// Configure authentication
String clientId = "YOUR_CLIENT_ID";
String clientSecret = "YOUR_CLIENT_SECRET";
CellsApi api = new CellsApi(clientId, clientSecret);
// Specify file names
String templateFile = "sales_template.xlsx";
String xmlFile = "sales_data.xml";
String outputFile = "generated_report.xlsx";
// First, upload both files to cloud storage (if not already there)
// For template:
byte[] templateBytes = Files.readAllBytes(Paths.get(templateFile));
UploadFileRequest uploadRequest = new UploadFileRequest();
uploadRequest.setPath(templateFile);
uploadRequest.setFile(templateBytes);
api.uploadFile(uploadRequest);
// For XML data:
byte[] xmlBytes = Files.readAllBytes(Paths.get(xmlFile));
uploadRequest = new UploadFileRequest();
uploadRequest.setPath(xmlFile);
uploadRequest.setFile(xmlBytes);
api.uploadFile(uploadRequest);
// Now, process the Smart Markers
PostWorkbookGetSmartMarkerResultRequest request = new PostWorkbookGetSmartMarkerResultRequest();
request.setName(templateFile);
request.setXmlFile(xmlFile);
request.setOutPath(outputFile);
// Execute the request
api.postWorkbookGetSmartMarkerResult(request);
// Download the generated file
DownloadFileRequest downloadRequest = new DownloadFileRequest();
downloadRequest.setPath(outputFile);
byte[] resultBytes = api.downloadFile(downloadRequest);
// Save the file locally
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
fos.write(resultBytes);
}
System.out.println("Report generated successfully and saved as " + outputFile);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}
4. Advanced Smart Marker Techniques
Smart Markers support various advanced features for handling complex data scenarios:
Nested Data
You can access nested properties using dot notation:
&=Customer.Address.City
Dynamic Ranges for Collections
For collections, Smart Markers automatically expand to fill as many rows as needed. The marker only needs to be placed in the first row of the intended range.
Custom Formulas
You can include formulas in cells with Smart Markers:
&=SalesData.UnitsSold*SalesData.Price
Smart Marker Directives
Smart Markers also support special directives for advanced operations:
&=Simple
- Simple variable replacement&=$
- Dynamic column placeholder&=*
- For collections/arrays with dynamic rows&=#
- Iterates over nested collections&=SUM(
- Performs aggregation functions
Example: Using Aggregation Functions
Add these to your template to demonstrate aggregation:
- In cell A12, enter “Total:”
- In cell C12, enter “&=SUM(SalesData.UnitsSold)”
- In cell D12, enter “&=SUM(SalesData.Revenue)”
5. Practical Scenario: Automated Monthly Report Generator
Let’s create a complete example that generates monthly sales reports automatically:
# Tutorial Code Example - Automated Monthly Report Generator
import os
import time
import asposecellscloud
from asposecellscloud.apis.cells_api import CellsApi
from asposecellscloud.models import *
from asposecellscloud.requests import *
import xml.etree.ElementTree as ET
from datetime import datetime, timedelta
import random
# Configure authentication
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
api = CellsApi(client_id, client_secret)
def generate_monthly_report(year, month, products, template_file="sales_template.xlsx"):
"""Generate a monthly sales report using Smart Markers."""
# Create appropriate file names
month_name = datetime(year, month, 1).strftime("%B")
xml_file = f"sales_data_{year}_{month}.xml"
output_file = f"Sales_Report_{month_name}_{year}.xlsx"
# Generate XML data
root = ET.Element("Data")
# Add report metadata
report = ET.SubElement(root, "Report")
ET.SubElement(report, "Month").text = month_name
ET.SubElement(report, "Year").text = str(year)
# Add sales data for each product
for product in products:
# Simulate some sales data
units_sold = random.randint(10, 200)
revenue = units_sold * product["price"]
sales_item = ET.SubElement(root, "SalesData")
ET.SubElement(sales_item, "ProductName").text = product["name"]
ET.SubElement(sales_item, "Category").text = product["category"]
ET.SubElement(sales_item, "UnitsSold").text = str(units_sold)
ET.SubElement(sales_item, "Revenue").text = str(revenue)
# Create the XML file
tree = ET.ElementTree(root)
tree.write(xml_file, encoding="utf-8", xml_declaration=True)
# Upload XML to cloud storage
with open(xml_file, "rb") as file:
upload_request = UploadFileRequest(path=xml_file, file=file.read())
api.upload_file(upload_request)
# Process the Smart Markers
request = PostWorkbookGetSmartMarkerResultRequest(
name=template_file,
xml_file=xml_file,
out_path=output_file
)
# Execute the request
api.post_workbook_get_smart_marker_result(request)
# Download the generated file
download_request = DownloadFileRequest(path=output_file)
response = api.download_file(download_request)
# Save the file locally
with open(output_file, 'wb') as f:
f.write(response)
print(f"Report for {month_name} {year} generated successfully as {output_file}")
return output_file
# Define our product catalog
products = [
{"name": "Widget A", "category": "Hardware", "price": 20},
{"name": "Widget B", "category": "Hardware", "price": 20},
{"name": "Software Suite", "category": "Software", "price": 100},
{"name": "Cloud Services", "category": "Services", "price": 100},
{"name": "Consulting", "category": "Services", "price": 150}
]
# Generate reports for the last three months
now = datetime.now()
for i in range(3):
report_date = now - timedelta(days=30 * i)
generate_monthly_report(report_date.year, report_date.month, products)
time.sleep(2) # Pause between API calls
This script automatically generates monthly sales reports for the past three months, simulating sales data for the specified products.
Troubleshooting Tips
When working with Smart Markers, you might encounter these common issues:
XML structure mismatch:
- Ensure your XML structure matches the Smart Marker references in the template
- Check for case sensitivity in element names
- Verify that collection elements are direct children of the root
Template formatting issues:
- Smart Markers must be the only content in a cell
- Check for extra spaces or characters that might be breaking the Smart Marker syntax
Data expansion problems:
- Ensure there is enough space for the data to expand (no merged cells or other data in the way)
- Verify that collection Smart Markers are in the correct row position
API errors:
- Check that both the template and XML files are properly uploaded to cloud storage
- Verify the paths/names used in the API request match the actual file names
What You’ve Learned
In this tutorial, you’ve learned how to:
- Create Excel templates with Smart Markers for dynamic data population
- Structure XML data to work with Smart Marker templates
- Process templates using the Aspose.Cells Cloud API
- Use advanced Smart Marker features like nested data and aggregation
- Implement an automated report generation system for monthly reporting
Further Practice
To reinforce your learning, try these exercises:
- Create a template with Smart Markers for a customer invoice
- Build a reporting system that uses Smart Markers to generate weekly performance dashboards
- Implement nested collections in a template (e.g., customers with multiple orders)
- Create a template that uses formulas in conjunction with Smart Markers