کار با تنظیمات اصلی کتابکار
کار با تنظیمات اصلی دفتر کار
فراتر از شبکهٔ صفحهکار، یک دفتر کار متادیتا و پیکربندیای دارد که بر نحوهٔ تفسیر اکسل از آن تأثیر میگذارد: سیستم تاریخ، نویسندهٔ سند، زبان و اینکه آیا اطلاعات بازیابی ذخیره میشود یا نه. کلاس Workbook این موارد را از طریق Workbook.Settings، Workbook.Properties و Workbook.LoadDiagnostics در دسترس قرار میدهد. رفتار ذخیرهسازی از طریق SaveOptions کنترل میشود.
تنظیمات دفتر کار
Workbook.Settings یک شیء WorkbookSettings برمیگرداند. Date1904 را به true تنظیم کنید تا از سیستم تاریخ ۱۹۰۴ استفاده شود (که در فایلهای منبعدار از Excel macOS رایج است). Culture را به یک نمونهٔ CultureInfo تنظیم کنید تا زبان تجزیهٔ عدد و تاریخ را کنترل کنید.
using Aspose.Cells_FOSS;
using System.Globalization;
var wb = new Workbook();
// Use 1904 date system
wb.Settings.Date1904 = true;
// Set culture for number/date formatting
wb.Settings.Culture = new CultureInfo("en-US");
wb.Worksheets[0].Cells["A1"].PutValue("Settings applied");
wb.Save("settings.xlsx");
var loaded = new Workbook("settings.xlsx");
Console.WriteLine("Date1904: " + loaded.Settings.Date1904);ویژگیهای سند
Workbook.Properties یک شیء WorkbookProperties برمیگرداند که شامل پرچمهای متمرکز بر نمایش مانند ShowObjects و FilterPrivacy است. برای نویسندگی و متادیتای توصیفی از Workbook.DocumentProperties استفاده کنید که Title، Subject، Author، Keywords، Comments، Category، Company و Manager را به عنوان ویژگیهای رشتهای مستقیم در دسترس قرار میدهد.
using Aspose.Cells_FOSS;
var wb = new Workbook();
var doc = wb.DocumentProperties;
doc.Title = "Quarterly Report";
doc.Subject = "Sales Data";
doc.Author = "Reporting Team";
doc.Company = "Contoso Ltd";
doc.Keywords = "sales, quarterly, 2026";
doc.Comments = "Generated by automated pipeline";
wb.Worksheets[0].Cells["A1"].PutValue("See document properties");
wb.Save("properties.xlsx");
var loaded = new Workbook("properties.xlsx");
Console.WriteLine("Title: " + loaded.DocumentProperties.Title);
Console.WriteLine("Author: " + loaded.DocumentProperties.Author);تشخیص بارگذاری
پس از بارگذاری یک کتابکار، Workbook.LoadDiagnostics را بررسی کنید تا متوجه شوید آیا کتابخانه تعمیراتی اعمال کرده است یا نه. LoadDiagnostics.HasRepairs true است اگر حداقل یک تعمیر ساختاری انجام شده باشد. LoadDiagnostics.HasDataLossRisk true است اگر تعمیر دادهای را حذف کرده باشد. برای دسترسی به اشیای DiagnosticEntry جداگانه با Code، Severity، Message، RepairApplied و DataLossRisk، LoadDiagnostics.Issues را تکرار کنید.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
try
{
var wb = new Workbook("possibly-corrupt.xlsx", opts);
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
{
Console.WriteLine("Repairs applied: " + diag.HasRepairs);
Console.WriteLine("Data loss risk: " + diag.HasDataLossRisk);
foreach (var entry in diag.Issues)
{
Console.WriteLine($" [{entry.Severity}] {entry.Code}: {entry.Message}");
Console.WriteLine($" RepairApplied={entry.RepairApplied}, DataLossRisk={entry.DataLossRisk}");
}
}
else
{
Console.WriteLine("File loaded cleanly.");
}
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Unrecoverable: " + ex.Message);
}گزینههای ذخیره
Workbook.Save(path, SaveOptions) یک شیء SaveOptions را میپذیرد تا خروجی ذخیرهسازی را سفارشی کند. UseSharedStrings تعیین میکند آیا مقادیر رشتهای در جدول رشتههای مشترک ذخیره شوند (اندازه فایل را برای شیتهای دارای رشتههای تکراری زیاد کاهش میدهد). ValidateBeforeSave پیش از نوشتن، اعتبارسنجی داخلی کتابکار را اجرا میکند. CompactStyles سبکهای استفادهنشده را حذف میکند. PreserveRecoveryMetadata تعیین میکند آیا متادیتای بازیابی Office حفظ شود.
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
for (var i = 0; i < 100; i++)
ws.Cells[i, 0].PutValue("Repeated string value");
var opts = new SaveOptions
{
UseSharedStrings = true,
ValidateBeforeSave = true,
CompactStyles = true,
PreserveRecoveryMetadata = false,
};
wb.Save("compact.xlsx", opts);
Console.WriteLine("Saved with SaveOptions.");نکات و بهترین روشها
- پس از بارگذاری فایلهای تعمیر شده،
LoadDiagnostics.HasDataLossRiskرا بررسی کنید و در صورت امکان حذف دادهها، به کاربران هشدار دهید. - برای فایلهای بهاشتراکگذاریشده با کاربران نهایی،
DocumentProperties.AuthorوCompanyرا تنظیم کنید — اینها در پنل اطلاعات فایل در اکسل نمایش داده میشوند. UseSharedStrings = trueبرای شیتهایی که دارای مقادیر رشتهای تکراری زیاد هستند (مثلاً ستونهای وضعیت) مفید است؛ اثر آن بر شیتهای عددیمحور کمینه است.Date1904باید بین فایل منبع و هدف یکسان باشد تا از انحراف مقادیر تاریخ هنگام کپیکردن سلولها بین کتابکارها جلوگیری شود.
مسائل رایج
| مشکل | دلیل | راهحل |
|---|---|---|
LoadDiagnostics.Issues پس از تعمیر خالی است | نیازی به تعمیر نبود یا TryRepair* تنظیم نشده بود | TryRepairPackage = true و TryRepairXml = true را در LoadOptions تنظیم کنید. |
DocumentProperties.Title ذخیره نشد | استفاده از WorkbookProperties به جای DocumentProperties | دسترسی به فرادادهٔ رشته از طریق Workbook.DocumentProperties، نه Workbook.Properties |
WorkbookSaveException هنگام ذخیره | خطای اعتبارسنجی با ValidateBeforeSave = true | پیام استثنا را بررسی کنید؛ اعتبارسنجی را غیرفعال کنید تا دادههای خراب را جدا کنید |
FAQ
تفاوت بین WorkbookProperties و DocumentProperties چیست؟
WorkbookProperties (از طریق Workbook.Properties) پرچمهای نمایش OOXML را نگه میدارد (مثلاً ShowObjects). DocumentProperties (از طریق Workbook.DocumentProperties) رشتههای فراداده به سبک Dublin-Core را شامل میشود: Title, Author, Company و غیره.
آیا CompactStyles سبکهایی را که نیاز دارم حذف میکند؟
CompactStyles فقط سبکهایی را که توسط هیچ سلول، قالببندی شرطی یا سبک نامگذاریشدهای ارجاع نمیشوند حذف میکند. سبکهای مورد استفاده هرگز حذف نمیشوند.
آیا میتوانم LoadDiagnostics را حتی زمانی که هیچ تعمیراتی انجام نشده است بخوانم؟
بله. وقتی هیچ تعمیراتی انجام نشده است، مجموعه Issues خالی است و هر دو HasRepairs و HasDataLossRisk مقدار false را برمیگردانند.
API Reference خلاصه
| کلاس / ویژگی | توضیح |
|---|---|
Workbook.Settings | برمیگرداند WorkbookSettings |
WorkbookSettings.Date1904 | از سیستم تاریخ 1904 استفاده کنید |
WorkbookSettings.Culture | محلی برای تجزیه عدد/تاریخ |
Workbook.DocumentProperties | متادیتا نویسنده، عنوان، شرکت |
Workbook.LoadDiagnostics | گزارش تعمیر پس از بارگذاری |
LoadDiagnostics.HasRepairs | true اگر تعمیر انجام شده باشد |
LoadDiagnostics.HasDataLossRisk | true اگر تعمیر دادهها را حذف کرد |
LoadDiagnostics.Issues | مجموعهای از اشیاء DiagnosticEntry |
DiagnosticEntry.Code | رشته کد تعمیر کوتاه |
DiagnosticEntry.Severity | مقدار enum DiagnosticSeverity |
DiagnosticEntry.Message | توصیف تعمیر قابل خواندن برای انسان |
SaveOptions.UseSharedStrings | رشتهها را در جدول رشتههای مشترک ذخیره کنید |
SaveOptions.ValidateBeforeSave | قبل از نوشتن اعتبارسنجی داخلی را اجرا کنید |
SaveOptions.CompactStyles | حذف سبکهای استفاده نشده |