EPPlus 字体系列不受影响
EPPlus Font Family Not Affected
我正在使用 asp.net MVC 4 和 epplus 作为 nuget 包将我的数据导出到 excel 文件中。我这样做如下:
var excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("Consumption");
workSheet.View.RightToLeft = true;
for (var col = 1; col <= totalCols; col++)
{
workSheet.Cells[1, col].Style.Font.Name = "B Zar";
workSheet.Cells[1, col].Style.Font.Size = 16;
workSheet.Cells[1, col].Style.Font.Bold = true;
workSheet.Cells[1, col].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
workSheet.Cells[1, col].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
workSheet.Cells[1, col].Value = ds.Tables[0].Columns[col - 1].ColumnName;
}
for (var row = 1; row <= totalRows; row++)
for (var col = 0; col < totalCols; col++)
{
workSheet.Cells[row + 1, col + 1].Style.Font.Name = "B Zar";
workSheet.Cells[row + 1, col + 1].Style.Font.Size = 11;
workSheet.Cells[row + 1, col + 1].Value = ds.Tables[0].Rows[row - 1][col];
}
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Top.Style =
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Bottom.Style =
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Right.Style =
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Left.Style =
OfficeOpenXml.Style.ExcelBorderStyle.Thin;
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
using (var memoryStream = new MemoryStream())
{
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Consumptions.xlsx");
excel.SaveAs(memoryStream);
memoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
问题是当我在 Excel 2016 下载文件并打开它时,字体系列不受影响,但出现在字体名称框中。如果我关注组合框并按 Enter,字体系列将受到影响。
我该如何解决这个问题?
试试这个:
var allCells = sheet.Cells[1, 1, sheet.Dimension.End.Row, sheet.Dimension.End.Column];
var cellFont = allCells.Style.Font;
cellFont.SetFromFont(new Font("Times New Roman", 12));
cellFont.Bold = true;
cellFont.Italic = true;
workSheet.Cells.Style.Font.Name = "Arial Narrow";
workSheet.Cells.Style.Font.Size = 10;
这将影响所有行和列。
出现此问题是因为 EPPlus(版本 4.5.3.2)不支持字体字符集。
所选字体 ('B Zar') 的字体字符集是 ARABIC (=178)。
我已经在 url https://github.com/mzatkhahi/EPPlus 上分叉了 EPPlus 并修复了这个错误。
然后你可以使用这段代码来支持波斯语字体:
workSheet.Cells[1, col].Style.Font.Charset = 178;
//For specific cell range
using (var range = worksheet.Cells[From Row, From Column, To Row, To Column])
{
range.Style.Font.Bold = true;
}
//For understanding,
//Column Number = Worksheet.Dimension.End.Column
//Row Number = Worksheet.Dimension.End.Row
// OR
//For Whole row
using(var package = new OfficeOpenXml.ExcelPackage())
{
worksheet.Row(5).CustomHeight = false;
worksheet.Row(5).Height = 50;
worksheet.Row(5).Style.Font.Bold = true ;
worksheet.Row(5).Style.WrapText = true;
}
我正在使用 asp.net MVC 4 和 epplus 作为 nuget 包将我的数据导出到 excel 文件中。我这样做如下:
var excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("Consumption");
workSheet.View.RightToLeft = true;
for (var col = 1; col <= totalCols; col++)
{
workSheet.Cells[1, col].Style.Font.Name = "B Zar";
workSheet.Cells[1, col].Style.Font.Size = 16;
workSheet.Cells[1, col].Style.Font.Bold = true;
workSheet.Cells[1, col].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
workSheet.Cells[1, col].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
workSheet.Cells[1, col].Value = ds.Tables[0].Columns[col - 1].ColumnName;
}
for (var row = 1; row <= totalRows; row++)
for (var col = 0; col < totalCols; col++)
{
workSheet.Cells[row + 1, col + 1].Style.Font.Name = "B Zar";
workSheet.Cells[row + 1, col + 1].Style.Font.Size = 11;
workSheet.Cells[row + 1, col + 1].Value = ds.Tables[0].Rows[row - 1][col];
}
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Top.Style =
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Bottom.Style =
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Right.Style =
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.Border.Left.Style =
OfficeOpenXml.Style.ExcelBorderStyle.Thin;
workSheet.Cells[1, 1, totalRows + 1, totalCols].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
using (var memoryStream = new MemoryStream())
{
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Consumptions.xlsx");
excel.SaveAs(memoryStream);
memoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
问题是当我在 Excel 2016 下载文件并打开它时,字体系列不受影响,但出现在字体名称框中。如果我关注组合框并按 Enter,字体系列将受到影响。
我该如何解决这个问题?
试试这个:
var allCells = sheet.Cells[1, 1, sheet.Dimension.End.Row, sheet.Dimension.End.Column];
var cellFont = allCells.Style.Font;
cellFont.SetFromFont(new Font("Times New Roman", 12));
cellFont.Bold = true;
cellFont.Italic = true;
workSheet.Cells.Style.Font.Name = "Arial Narrow";
workSheet.Cells.Style.Font.Size = 10;
这将影响所有行和列。
出现此问题是因为 EPPlus(版本 4.5.3.2)不支持字体字符集。 所选字体 ('B Zar') 的字体字符集是 ARABIC (=178)。 我已经在 url https://github.com/mzatkhahi/EPPlus 上分叉了 EPPlus 并修复了这个错误。 然后你可以使用这段代码来支持波斯语字体:
workSheet.Cells[1, col].Style.Font.Charset = 178;
//For specific cell range
using (var range = worksheet.Cells[From Row, From Column, To Row, To Column])
{
range.Style.Font.Bold = true;
}
//For understanding,
//Column Number = Worksheet.Dimension.End.Column
//Row Number = Worksheet.Dimension.End.Row
// OR
//For Whole row
using(var package = new OfficeOpenXml.ExcelPackage())
{
worksheet.Row(5).CustomHeight = false;
worksheet.Row(5).Height = 50;
worksheet.Row(5).Style.Font.Bold = true ;
worksheet.Row(5).Style.WrapText = true;
}