Предоставьте путь к экспортированному файлу HTML листа через интерфейс IFilePathProvider

Возможные сценарии использования

Предположим, у вас есть файл Excel с несколькими листами, и вы хотите экспортировать каждый лист в отдельный файл HTML. Если у ваших листов есть ссылки на другие листы, то эти ссылки будут нарушены в экспортированном HTML. Для решения этой проблемы Aspose.Cells предоставляет интерфейс IFilePathProvider, который вы можете реализовать, чтобы исправить нарушенные ссылки.

Предоставьте путь к экспортированному файлу HTML рабочего листа через интерфейс IFilePathProvider

Пожалуйста, скачайте образец файла Excel, использованный в следующем коде, и его экспортированные HTML-файлы. Все эти файлы находятся в каталоге Temp. Вам следует извлечь их на диск C:. Тогда это станет каталогом C:\Temp. Затем вы откроете файл Sheet1.html в браузере и кликнете по двум ссылкам внутри него. Эти ссылки относятся к этим двум экспортированным HTML-листам, которые находятся в каталоге C:\Temp\OtherSheets.

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

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

Ниже показано, как выглядят C:\Temp\Sheet1.html и его ссылки

todo:image_alt_text

Ниже показан исходный код HTML. Как видите, теперь ссылки указывают на каталог C:\Temp\OtherSheets. Это было достигнуто с помощью интерфейса IFilePathProvider

todo:image_alt_text

Образец кода

Обратите внимание, что каталог C:\Temp приведён только в иллюстративных целях. Вы можете использовать любой каталог на ваше усмотрение, поместив внутрь его образец файла Excel и выполнить предоставленный образец кода. Затем он создаст подкаталог OtherSheets в вашем каталоге и экспортирует HTML второго и третьего листов внутрь него. Перед выполнением измените переменную dirPath в предоставленном коде и укажите на ваш выбранный каталог.

Пожалуйста, обратите внимание, что комментирование этих строк внутри кода нарушит ссылки в Sheet1.html, и Sheet2.html или Sheet3.html не откроются, когда их ссылки будут кликнуты внутри Sheet1.html

Вот полный образец кода, который можно выполнить с предоставленным образцом файла Excel.

// 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 "";
}
}