توفير مسار ملف 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 interface.

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