Gestione degli oggetti OLE con JavaScript tramite C++
Introduzione
OLE (Object Linking and Embedding) è un framework per la tecnologia dei documenti complessi. In breve, un documento complesso è come un desktop visuale che può contenere oggetti visivi e informativi di ogni tipo: testo, calendari, animazioni, suoni, video in movimento, 3D, notizie aggiornate continuamente, controlli e altro. Ogni oggetto del desktop è un’entità di programma indipendente che può interagire con un utente e anche comunicare con altri oggetti sul desktop.
OLE è supportato da molti programmi diversi ed è usato per rendere i contenuti creati in un programma disponibili in un altro. Ad esempio, puoi inserire un documento Microsoft Word in Microsoft Excel. Per vedere quali tipi di contenuto puoi inserire, clicca Oggetto nel menu Inserisci. Solo i programmi installati sul computer e che supportano gli oggetti OLE appaiono nella casella Tipo di oggetto.
Inserimento di oggetti OLE nel foglio di lavoro
Aspose.Cells for JavaScript tramite C++ supporta l’aggiunta, l’estrazione e la manipolazione di oggetti OLE nei fogli di lavoro. Per questo motivo, Aspose.Cells ha la classe OleObjectCollection, usata per aggiungere un nuovo oggetto OLE alla collezione. Un’altra classe, OleObject, rappresenta un oggetto OLE. Ha alcuni membri importanti:
- La proprietà imageData specifica i dati dell’immagine (icona) di tipo array di byte. L’immagine verrà visualizzata per mostrare l’oggetto OLE nel foglio di lavoro.
- La proprietà objectData specifica i dati dell’oggetto sotto forma di array di byte. Questi dati verranno visualizzati nel loro programma correlato quando fai doppio clic sull’icona dell’oggetto OLE.
L’esempio seguente mostra come aggiungere un/i oggetto(i) OLE in un foglio di lavoro.
<!DOCTYPE html>
<html>
<head>
<title>Add OLE Object Example</title>
</head>
<body>
<h1>Add OLE Object Example</h1>
<p>
Select an image to display for the OLE object (e.g., logo.jpg) and a file to embed into the OLE object (e.g., book1.xls).
</p>
<label>Image (for OLE display): <input type="file" id="imageInput" accept="image/*" /></label>
<br/>
<label>Object to embed (e.g., .xls): <input type="file" id="objectInput" accept=".xls,.xlsx,.doc,.docx,.pdf" /></label>
<br/>
<button id="runExample">Add OLE Object and Save</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, Utils } = 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 imageInput = document.getElementById('imageInput');
const objectInput = document.getElementById('objectInput');
const resultDiv = document.getElementById('result');
if (!imageInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an image file for the OLE display.</p>';
return;
}
if (!objectInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select a file to embed into the OLE object.</p>';
return;
}
// Read files
const imageFile = imageInput.files[0];
const objectFile = objectInput.files[0];
const imageBuffer = await imageFile.arrayBuffer();
const objectBuffer = await objectFile.arrayBuffer();
// Instantiate a new Workbook.
const workbook = new Workbook();
// Get the first worksheet.
const sheet = workbook.worksheets.get(0);
// Add an Ole object into the worksheet with the image shown in MS Excel.
// Position: row 14, column 3, width 200, height 220 (same as JavaScript example)
sheet.oleObjects.add(14, 3, 200, 220, new Uint8Array(imageBuffer));
// Set embedded ole object data (converted setter to property assignment)
sheet.oleObjects.get(0).objectData = new Uint8Array(objectBuffer);
// Save the excel file (Excel97To2003 format to match .xls)
const outputData = workbook.save(SaveFormat.Excel97To2003);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output.out.xls';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
resultDiv.innerHTML = '<p style="color: green;">OLE object added successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>
Estrazione degli oggetti OLE nel Workbook
Nell’esempio seguente viene mostrato come estrarre gli oggetti OLE in un Workbook. L’esempio ottiene diversi oggetti OLE da un file XLS esistente e salva file diversi (DOC, XLS, PPT, PDF, ecc.) in base al tipo di formato file dell’oggetto OLE.
Dopo aver eseguito il codice, possiamo salvare file diversi in base ai rispettivi tipi di formato degli oggetti OLE.
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example - Extract OLE Objects</title>
</head>
<body>
<h1>Extract OLE Objects from Excel</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.xlsb" />
<button id="runExample">Extract OLE Objects</button>
<div id="downloadContainer"></div>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, Utils } = 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 downloadContainer = document.getElementById('downloadContainer');
const result = document.getElementById('result');
downloadContainer.innerHTML = '';
result.innerHTML = '';
if (!fileInput.files.length) {
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 from uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Get the OleObject Collection in the first worksheet.
const worksheet = workbook.worksheets.get(0);
const oles = worksheet.oleObjects;
// Loop through all the oleobjects and extract each object.
for (let i = 0; i < oles.count; i++) {
const ole = oles.get(i);
// Specify the output filename.
let ext = 'jpg';
// Specify each file format based on the oleobject format type.
switch (ole.fileFormatType) {
case AsposeCells.FileFormatType.Doc:
ext = "doc";
break;
case AsposeCells.FileFormatType.Xlsx:
ext = "xlsx";
break;
case AsposeCells.FileFormatType.Ppt:
ext = "ppt";
break;
case AsposeCells.FileFormatType.Pdf:
ext = "pdf";
break;
case AsposeCells.FileFormatType.Unknown:
ext = "jpg";
break;
default:
ext = "bin";
break;
}
const fileName = `ole_${i}.${ext}`;
// Save the oleobject as a new excel file if the object type is xlsx.
if (ole.fileFormatType === AsposeCells.FileFormatType.Xlsx) {
const ms = new Uint8Array(ole.objectData);
const oleBook = new Workbook(ms);
oleBook.settings.isHidden = false;
const outputData = oleBook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = `Excel_File${i}.out.xlsx`;
link.textContent = `Download Excel_File${i}.out.xlsx`;
link.style.display = 'block';
downloadContainer.appendChild(link);
} else {
// Create the files based on the oleobject format types.
const data = ole.objectData;
const blob = new Blob([data]);
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = fileName;
link.textContent = `Download ${fileName}`;
link.style.display = 'block';
downloadContainer.appendChild(link);
}
}
result.innerHTML = '<p style="color: green;">OLE object extraction completed. Use the links above to download the files.</p>';
});
</script>
</html>
Estrazione del file MOL incorporato
Aspose.Cells for JavaScript tramite C++ supporta l’estrazione di oggetti di tipi poco comuni come MOL (file di dati molecolari contenente informazioni su atomi e legami). Il seguente snippet di codice dimostra come estrarre un file MOL incorporato e salvarlo su disco usando questo file Excel di esempio.
<!DOCTYPE html>
<html>
<head>
<title>Extract OLE Objects Example</title>
</head>
<body>
<h1>Extract OLE Objects Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx" />
<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, Utils } = 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 from uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
let index = 1;
const worksheets = workbook.worksheets;
const sheetCount = worksheets.count;
const resultDiv = document.getElementById('result');
resultDiv.innerHTML = '';
for (let i = 0; i < sheetCount; i++) {
const sheet = worksheets.get(i);
const oles = sheet.oleObjects;
const oleCount = oles.count;
for (let j = 0; j < oleCount; j++) {
const ole = oles.get(j);
const data = ole.objectData;
const blob = new Blob([data], { type: 'application/octet-stream' });
const url = URL.createObjectURL(blob);
const fileName = `OleObject${index}.mol`;
const link = document.createElement('a');
link.href = url;
link.download = fileName;
link.textContent = `Download ${fileName}`;
link.style.display = 'block';
resultDiv.appendChild(link);
index++;
}
}
if (!resultDiv.hasChildNodes()) {
resultDiv.innerHTML = '<p>No OLE objects found in the workbook.</p>';
} else {
const info = document.createElement('p');
info.style.color = 'green';
info.textContent = 'OLE objects extracted. Click the links to download the extracted .mol files.';
resultDiv.insertBefore(info, resultDiv.firstChild);
}
});
</script>
</html>
Argomenti avanzati
- Accesso e modifica dell’etichetta di visualizzazione dell’oggetto Ole collegato
- Aggiornare automaticamente l’oggetto OLE tramite Microsoft Excel usando Aspose.Cells
- Estrarre gli oggetti OLE dal Workbook
- Ottieni o Imposta l’Identificatore di Classe dell’Oggetto OLE Incorporato
- Inserimento di un file WAV come oggetto Ole