Bereitstellung des exportierten Arbeitsblatt HTML Dateipfads über die IFilePathProvider Schnittstelle
Mögliche Verwendungsszenarien
Angenommen, Sie haben eine Excel-Datei mit mehreren Arbeitsblättern und möchten jedes Arbeitsblatt in separate HTML-Dateien exportieren. Wenn eines Ihrer Arbeitsblätter Links zu anderen Arbeitsblättern enthält, werden diese Links in der exportierten HTML-Datei unterbrochen. Um dieses Problem zu lösen, bietet Aspose.Cells die IFilePathProvider-Schnittstelle, die Sie implementieren können, um die defekten Links zu reparieren.
Exportierten Arbeitsblatt-HTML-Dateipfad über das IFilePathProvider-Interface bereitstellen
Bitte laden Sie die Beispiel-Excel-Datei herunter, die im folgenden Code verwendet wird, und ihre exportierten HTML-Dateien. Alle diese Dateien befinden sich im Temp-Verzeichnis. Sie sollten sie auf Laufwerk C: extrahieren. Dann wird daraus das Verzeichnis C:\Temp. Dann öffnen Sie die Datei Sheet1.html im Browser und klicken auf die zwei Links darin. Diese Links verweisen auf diese beiden exportierten HTML-Arbeitsblätter, die sich im Verzeichnis C:\Temp\Andere Blätter befinden.
file:///C:/Temp/OtherSheets/Sheet2.html#RANGE!A1
file:///C:/Temp/OtherSheets/Sheet3.html#RANGE!A1
Die folgende Abbildung zeigt, wie die C:\Temp\Sheet1.html und ihre Links aussehen
Die folgende Abbildung zeigt die HTML-Quelle. Wie Sie sehen können, verweisen die Links jetzt auf das Verzeichnis C:\Temp\Andere Blätter. Dies wurde mit Hilfe der IFilePathProvider-Schnittstelle erreicht.
Beispielcode
Bitte beachten Sie, dass das Verzeichnis C:\Temp nur zu Illustrationszwecken dient. Sie können ein beliebiges Verzeichnis Ihrer Wahl verwenden und die Beispiel-Excel-Datei dort platzieren und den bereitgestellten Beispielcode ausführen. Es wird dann ein Unterordner namens OtherSheets in Ihrem Verzeichnis erstellt und die HTMLs der zweiten und dritten Arbeitsblätter darin exportiert. Ändern Sie bitte die dirPath-Variable im bereitgestellten Code und verweisen Sie vor der Ausführung darauf, das Verzeichnis Ihrer Wahl anzugeben.
Bitte beachten Sie, dass das Kommentieren dieser Zeilen im Code die Links in Sheet1.html unterbrechen wird und Sheet2.html oder Sheet3.html nicht geöffnet werden, wenn ihre Links in der Sheet1.html angeklickt werden.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// If you will comment this line, then hyperlinks will be broken | |
options.FilePathProvider = new FilePathProvider(); |
Hier ist der vollständige Beispielcode, der mit der bereitgestellten Beispiel-Excel-Datei ausgeführt werden kann.
// 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 ""; | |
} | |
} |