Proporcionar la ruta del archivo html de la hoja de cálculo exportada a través de la interfaz IFilePathProvider

Escenarios de uso posibles

Suponga que tiene un archivo de Excel con múltiples hojas y desea exportar cada hoja a un archivo HTML individual. Si alguna de sus hojas tiene enlaces a otras hojas, entonces esos enlaces estarán rotos en el HTML exportado. Para resolver este problema, Aspose.Cells proporciona la IFilePathProvider interfaz que puede implementar para corregir los enlaces rotos.

Proporcione la ruta del archivo HTML de hoja de cálculo exportado a través de la interfaz IFilePathProvider

Por favor, descargue el archivo de Excel de muestra utilizado en el siguiente código y sus archivos HTML exportados. Todos estos archivos están dentro del directorio Temp. Debe extraerlos en la unidad C:. Luego se convertirá en el directorio C:\Temp. Luego abrirá el archivo Sheet1.html en el navegador y hacer clic en los dos enlaces que contiene. Estos enlaces se refieren a estas dos hojas de cálculo HTML exportadas que están dentro del directorio C:\Temp\OtherSheets.

 file:///C:/Temp/OtherSheets/Sheet2.html#RANGE!A1

file:///C:/Temp/OtherSheets/Sheet3.html#RANGE!A1

La siguiente captura de pantalla muestra cómo se ven los enlaces en C:\Temp\Sheet1.html y sus vínculos

todo:image_alt_text

La siguiente captura de pantalla muestra la fuente HTML. Como se puede ver, los enlaces ahora se refieren al directorio C:\Temp\OtherSheets. Esto se logró utilizando la interfaz IFilePathProvider

todo:image_alt_text

Código de muestra

Tenga en cuenta que el directorio C:\Temp es solo para fines ilustrativos. Puede usar cualquier directorio de su elección y colocar el archivo de Excel de muestra dentro de él y ejecutar el código de ejemplo proporcionado. Luego creará el subdirectorio OtherSheets dentro de su directorio y exportará las hojas de cálculo HTML del segundo y tercer archivo dentro de él. Cambie la variable dirPath dentro del código proporcionado y refiérala al directorio de su elección antes de la ejecución.

Por favor note que comentar estas líneas dentro del código romperá los enlaces en Sheet1.html y Sheet2.html o Sheet3.html no se abrirán cuando se haga clic en sus enlaces dentro de Sheet1.html

Aquí está el código de ejemplo completo que se puede ejecutar con el archivo de Excel de muestra proporcionado.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
public class ExportedWorkSheetViaIFilePathProvider
{
// This is the directory path which contains the sample.xlsx file
static string dirPath = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
// because Aspose.Cells will always make the warning worksheet as active sheet in Evaluation mode.
SetLicense();
// Check if license is set, otherwise do not proceed
Workbook wb = new Workbook();
if (wb.IsLicensed == false)
{
Console.WriteLine("You must set the license to execute this code successfully.");
Console.ReadKey();
}
else
{
// Test IFilePathProvider interface
TestFilePathProvider();
}
}
static void SetLicense()
{
string licPath = @"Aspose.Cells.lic";
Aspose.Cells.License lic = new Aspose.Cells.License();
lic.SetLicense(licPath);
Console.WriteLine(CellsHelper.GetVersion());
System.Diagnostics.Debug.WriteLine(CellsHelper.GetVersion());
Environment.CurrentDirectory = dirPath;
}
static void TestFilePathProvider()
{
// Create subdirectory for second and third worksheets
Directory.CreateDirectory(dirPath + "OtherSheets");
// Load sample workbook from your directory
Workbook wb = new Workbook(dirPath + "Sample.xlsx");
// Save worksheets to separate html files
// Because of IFilePathProvider, hyperlinks will not be broken.
for (int i = 0; i < wb.Worksheets.Count; i++)
{
// Set the active worksheet to current value of variable i
wb.Worksheets.ActiveSheetIndex = i;
// Creat html save option
HtmlSaveOptions options = new HtmlSaveOptions();
options.ExportActiveWorksheetOnly = true;
// If you will comment this line, then hyperlinks will be broken
options.FilePathProvider = new FilePathProvider();
// Sheet actual index which starts from 1 not from 0
int sheetIndex = i + 1;
string filePath = "";
// Save first sheet to same directory and second and third worksheets to subdirectory
if (i == 0)
{
filePath = dirPath + "Sheet1.html";
}
else
{
filePath = dirPath + "OtherSheets\\Sheet" + sheetIndex + "_out.html";
}
// Save the worksheet to html file
wb.Save(filePath, options);
}
}
}
// Implementation of IFilePathProvider interface
public class FilePathProvider : IFilePathProvider
{
// Constructor
public FilePathProvider()
{
}
// Gets the full path of the file by worksheet name when exporting worksheet to html separately.
// So the references among the worksheets could be exported correctly.
public string GetFullName(string sheetName)
{
if ("Sheet2".Equals(sheetName))
{
return @"file:///" + "OtherSheets\\Sheet2.html";
}
else if ("Sheet3".Equals(sheetName))
{
return @"file:///" + "OtherSheets\\Sheet3.html";
}
return "";
}
}