使用 C++ 的 JavaScript 管理文档属性
介绍
Microsoft Excel提供了向电子表格文件添加属性的功能。这些文档属性提供有用信息,分为以下2类。
- 系统定义(内置)属性:内置属性包含有关文档的一般信息,如文档标题、作者姓名、文档统计信息等。
- 用户定义(自定义)属性:最终用户以名称-值对的形式定义的自定义属性。
如何使用Microsoft Excel管理文档属性
Microsoft Excel允许以WYSIWYG方式管理Excel文件的文档属性。请按照以下步骤在Excel 2016中打开属性对话框。
- 从文件菜单中选择信息。
| 选择信息菜单 |
|---|
![]() |
- 点击属性标题并选择"高级属性"。
| 单击高级属性选择 |
|---|
![]() |
- 管理文件的文档属性。
| 属性对话框 |
|---|
![]() |
| 在属性对话框中,有不同的选项卡,如常规、摘要、统计、内容和自定义。每个选项卡都可以帮助配置文件相关的不同信息。自定义选项卡用于管理自定义属性。 |
如何使用Aspose.Cells处理文档属性
开发人员可以使用Aspose.Cells API动态管理文档属性。此功能帮助开发人员存储有用信息,如文件接收时间、处理时间戳等。
C++ 版的 Script 直接在输出文件中写入 API 和版本信息。例如,在导出 PDF 时,Script 会将 Application 字段填充为 ‘Aspose.Cells’,PDF 生产者 字段为例如 ‘Aspose.Cells v17.9’。
请注意,不能指示 C++ 版的 Script 从输出文档中更改或删除此信息。
如何访问文档属性
Aspose.Cells API支持内置和自定义两种类型的文档属性。Aspose.Cells的Workbook类代表Excel文件,类似Excel文件,Workbook类可以包含多个工作表,每个由Worksheet类表示,而工作表集合由WorksheetCollection类表示。
使用WorksheetCollection访问文件的文档属性,如下所示。
- 要访问内建文档属性,请使用WorksheetCollection.builtInDocumentProperties()。
- 要访问自定义文档属性,请使用WorksheetCollection.customDocumentProperties()。
WorksheetCollection.builtInDocumentProperties()和WorksheetCollection.customDocumentProperties()都返回Aspose.Cells.Properties.DocumentPropertyCollection的实例。该集合包含Aspose.Cells.Properties.DocumentProperty对象,每个对象代表一个内置或自定义文档属性。
应用程序需求决定如何访问属性,即通过索引或属性名,比如在下面的示例中演示。
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example - Document Properties</title>
</head>
<body>
<h1>Document Properties Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Load Document Properties</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const resultEl = document.getElementById('result');
const fileInput = document.getElementById('fileInput');
if (!fileInput.files.length) {
resultEl.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiating a Workbook object and opening the Excel file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Retrieve a list of all custom document properties of the Excel file
const customProperties = workbook.customDocumentProperties;
// Accessing a custom document property by using the property name
const customProperty1 = customProperties.get("ContentTypeId");
// Accessing the same custom document property by using the property index
const customProperty2 = customProperties.get(0);
const outputs = [];
if (customProperty1) {
outputs.push(`<p>${customProperty1.name} ${customProperty1.value}</p>`);
}
if (customProperty2) {
outputs.push(`<p>${customProperty2.name} ${customProperty2.value}</p>`);
}
if (!outputs.length) {
resultEl.innerHTML = '<p style="color: orange;">No custom document properties found.</p>';
} else {
resultEl.innerHTML = outputs.join('');
}
});
</script>
</html>
Aspose.Cells.Properties.DocumentProperty类允许检索文档属性的名称、值和类型:
- 要获取属性名称,请使用DocumentProperty.name()。
- 要获取属性值,使用DocumentProperty.value()。DocumentProperty.value()返回值作为对象。
- 要获取属性类型,使用DocumentProperty.type()。这返回PropertyType枚举值之一。当你获取属性类型后,可以使用DocumentProperty.ToXXX方法获得相应类型的值,而不是使用DocumentProperty.value()。DocumentProperty.ToXXX方法在下表中描述。
| 成员名称 | 描述 | ToXXX方法 |
|---|---|---|
| Boolean | 属性数据类型为布尔值 | ToBool |
| Date | 属性数据类型为日期时间。请注意,Microsoft Excel仅存储日期部分,无法在此类型的自定义属性中存储时间 | ToDateTime |
| Float | 属性数据类型为双精度浮点数 | ToDouble |
| Number | 属性数据类型为Int32 | ToInt |
| String | 属性数据类型为字符串 | ToString |
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Retrieve Custom Document Properties Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, Worksheet, Cell } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultDiv = document.getElementById('result');
resultDiv.innerHTML = '';
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiate a Workbook object by opening the uploaded Excel file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Retrieve a list of all custom document properties of the Excel file
const customProperties = workbook.customDocumentProperties;
let outputHtml = '<h2>Custom Document Properties</h2>';
// Accessing a custom document property (first)
const customProperty1 = customProperties.get(0);
if (customProperty1) {
// Storing the value of the document property as an object
const objectValue = customProperty1.value;
outputHtml += `<p><strong>${customProperty1.name}</strong> (type: ${customProperty1.type}) : ${objectValue}</p>`;
} else {
outputHtml += '<p>No first custom property found.</p>';
}
// Accessing a custom document property (second)
const customProperty2 = customProperties.get(1);
if (customProperty2) {
// Checking the type of the document property and then storing the value according to that type
if (customProperty2.type === AsposeCells.PropertyType.String) {
const value = customProperty2.value.toString();
outputHtml += `<p>${customProperty2.name} : ${value}</p>`;
} else {
outputHtml += `<p>${customProperty2.name} (type: ${customProperty2.type}) : ${customProperty2.value}</p>`;
}
} else {
outputHtml += '<p>No second custom property found.</p>';
}
resultDiv.innerHTML = outputHtml;
});
</script>
</html>
如何添加或删除自定义文档属性
正如我们在本主题开头所述的那样,开发人员无法添加或删除内置属性,因为这些属性是系统定义的,但可以添加或删除自定义属性,因为这些是用户定义的。
如何添加自定义属性
Aspose.Cells API已暴露add(string, string)方法,用于向集合中添加自定义属性。add(string, string)方法将属性添加到Excel文件中,并返回新文档属性的引用,为Aspose.Cells.Properties.DocumentProperty对象。
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example - Add Custom Document Property</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
if (!fileInput.files.length) {
document.getElementById('result').innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiating a Workbook object and opening the Excel file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Retrieve a list of all custom document properties of the Excel file
const customProperties = workbook.customDocumentProperties;
// Adding a custom document property to the Excel file
customProperties.add("Publisher", "Aspose");
// Saving the modified Excel file
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'out_sample-document-properties.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
document.getElementById('result').innerHTML = '<p style="color: green;">Custom property added successfully! Click the download link to get the modified file.</p>';
});
});
</script>
</html>
如何配置’链接到内容’自定义属性
要创建一个与给定范围内容关联的自定义属性,请调用CustomDocumentPropertyCollection.addLinkToContent(string, string)方法并传递属性名和源。可以通过DocumentProperty.isLinkedToContent()属性检查是否将属性配置为与内容关联。此外,也可以使用source()属性和DocumentProperty类获取源范围。
我们在示例中使用了一个简单的模板Microsoft Excel文件。工作簿有一个命名范围标记为MyRange,它指向单元格值。
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example - Custom Document Properties</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultEl = document.getElementById('result');
if (!fileInput.files.length) {
resultEl.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiate a Workbook by loading the uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Retrieve a list of all custom document properties of the Excel file
const customProperties = workbook.worksheets.customDocumentProperties;
// Add link to content.
customProperties.addLinkToContent("Owner", "MyRange");
// Accessing the custom document property by using the property name
const customProperty1 = customProperties.get("Owner");
// Check whether the property is linked to content
const isLinkedToContent = customProperty1.isLinkedToContent;
// Get the source for the property
const source = customProperty1.source;
// Save the file
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'out_sample-document-properties.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
resultEl.innerHTML = `<p style="color: green;">Operation completed successfully! Property linked: ${isLinkedToContent}. Source: ${source}. Click the download link to get the modified file.</p>`;
});
</script>
</html>
如何移除自定义属性
要使用Aspose.Cells删除自定义属性,请调用DocumentPropertyCollection.remove(string)方法并传递要删除的文档属性名称。
<!DOCTYPE html>
<html>
<head>
<title>Remove Custom Document Property Example</title>
</head>
<body>
<h1>Remove Custom Document Property Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
if (!fileInput.files.length) {
document.getElementById('result').innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiate a Workbook object by opening the uploaded Excel file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Retrieve a list of all custom document properties of the Excel file
const customProperties = workbook.customDocumentProperties;
// Removing a custom document property named "Publisher"
customProperties.remove("Publisher");
// Save the file and provide a download link
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'out_sample-document-properties.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
document.getElementById('result').innerHTML = '<p style="color: green;">Custom property removed successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>


