我一直在浏览 OpenXml 文档,但找不到我需要的信息。具体来说,我正在寻找如何将默认工作表对齐方式设置为从左侧而不是右侧开始。感谢您的帮助🙏
我想在 .net 8 中创建 Excel 文件,我使用 OpenXml 并且工作正常,但我无法使其 RTL
[HttpPost]
[DisableRequestSizeLimit]
public async Task<IActionResult> ValidationAndVerificationTaaminExcelFile(ValidationAndVerificationTaaminExcelFileDto request)
{
try
{
string fileAddress = @"D:\Excel\Output.xlsx";
if (System.IO.File.Exists(fileAddress))
{
System.IO.File.Delete(fileAddress);
}
using (SpreadsheetDocument doc = SpreadsheetDocument.Create(fileAddress, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = doc.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart1 = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart1.Worksheet = new Worksheet(new SheetData());
WorksheetPart worksheetPart2 = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart2.Worksheet = new Worksheet(new SheetData());
Sheets sheets = doc.WorkbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet1 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart2), SheetId = 1, Name = "ویزیت شد" };
Sheet sheet2 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart2), SheetId = 2, Name = "ویزیت موفق" };
Sheet sheet3 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart2), SheetId = 3, Name = "mldhsp65" };
Sheet sheet4 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart1), SheetId = 4, Name = "Darman" };
Sheet sheet5 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart1), SheetId = 5, Name = "ارسال نشده" };
Sheet sheet6 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart1), SheetId = 6, Name = "شبیه سازی شده" };
Sheet sheet7 = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart1), SheetId = 7, Name = "در دیتابیس هست در سازمان نیست" };
sheets.Append(sheet1, sheet2, sheet3, sheet4, sheet5, sheet6, sheet7);
string[,] sheet1Content = new string[,] { { "Name", "Age", "Country" }, { "John", "30", "USA" }, { "Alice", "25", "UK" }, { "Bob", "35", "Canada" } };
AddContentToWorksheet(doc, worksheetPart2, sheet1Content);
// Add content to sheet2 and sheet3
string[,] sheet2Content = new string[,] { { "Name", "Age", "Country" }, { "John", "30", "USA" }, { "Alice", "25", "UK" }, { "Bob", "35", "Canada" } };
AddContentToWorksheet(doc, worksheetPart2, sheet2Content);
string[,] sheet3Content = new string[,] { { "Name", "Age", "Country" }, { "David", "40", "Australia" }, { "Emma", "28", "Germany" }, { "Jack", "32", "France" } };
AddContentToWorksheet(doc, worksheetPart2, sheet3Content);
workbookPart.Workbook.Save();
}
DateTime convertedDate = UtilityMananger.PersianToGeorgian(request.Date);
var IsExist = await _taaminService.CheckForDuplicateRecordByDate(request.ExcelType, convertedDate);
if (IsExist)
{
return Ok(new ResponseDto<List<TaminResult>> { IsSuccessFull = false, Data = null, Message = ErrorsMessages.SubmitedBefore, Status = "Failed" });
}
var result = await _taaminService.ValidateExcelFile(request.Date, request.ExcelType);
return Ok(new ResponseDto<ValidationAndVerificationExcelResponseDto> { IsSuccessFull = true, Data = result, Message = ErrorsMessages.Success, Status = "Success" });
}
catch (Exception ex)
{
// TODO LOG
return StatusCode(StatusCodes.Status500InternalServerError,
new ResponseDto<bool>
{
IsSuccessFull = false,
Message = ErrorsMessages.InternalError500,
Status = "Failed"
});
}
}
要将工作表设置为 OpenXML 中的 RTL,需要修改工作表的 SheetView 属性。 SheetView 控制工作表显示的各个方面,将其 RightToLeft 属性设置为 true 会将方向更改为 RTL。 以下是将 RTL 设置合并到现有方法中的方法:
private static void AddContentToWorksheet(SpreadsheetDocument document,
WorksheetPart worksheetPart, string[,] content)
{
// ... Your existing code to add content ...
// Set the sheet view to RightToLeft
SheetView sheetView = new SheetView() { RightToLeft = true };
SheetViews sheetViews = worksheetPart.Worksheet.GetFirstChild<SheetViews>();
if (sheetViews == null)
{
sheetViews = new SheetViews();
worksheetPart.Worksheet.Append(sheetViews);
}
sheetViews.Append(sheetView);
worksheetPart.Worksheet.Save();
}
在每个工作表中填写数据后使用此方法。例如:
// Create the worksheet content as a two-dimensional array
string[,] sheet1Content = { /* Your content array */ };
// ... code to add worksheet part ...
// Now add the content and set the view to RTL
AddContentToWorksheet(spreadsheetDocument, worksheetPart, sheet1Content);
确保在将所有内容添加到工作表后调用此方法,因为 Save 方法将完成更改。您想要 RTL 的每个工作表部分都应该应用此方法。
请记住,处理 SheetView 可能已存在的情况很重要。上面的代码片段检查 SheetView 是否存在,并仅在必要时创建一个新的。