我有一个C#数据处理应用程序,它使用EPPlus将最终结果写入Excel工作表。行的背景颜色根据该行上的数据表示的内容而更改。时间永远不是问题因为我只处理过低于< 100MB的文件。但是,随着我的要求发生变化并且文件变大,我注意到......只是着色使我的应用程序慢了60%。去除着色使应用程序显着加快。下面的代码段是我用来为数据着色以使其在视觉上有区别的代码示例。我不是EPPlus的专家,但有没有办法,这可以优化,使我的应用程序更快?或者,对于那些最终会查看数据的人来说,有没有更好的方法让行在视觉上分明?任何帮助将不胜感激!
if (data[4] == "3")
{
// color the type 3 messages here
var fill1 = cell1.Style.Fill;
fill1.PatternType = ExcelFillStyle.Solid;
fill1.BackgroundColor.SetColor(Color.LightGray);
}
if (data[4] == "4")
{
var fill1 = cell1.Style.Fill;
fill1.PatternType = ExcelFillStyle.Solid;
fill1.BackgroundColor.SetColor(Color.BlanchedAlmond);
}
编辑:
这是我用来复制模板并将excel数据写入新工作表的代码。 p
是一个Excel包,我在写入excel文件之前将其转换为字节数组。
Byte[] bin = p.GetAsByteArray();
File.Copy("C:\\Users\\mpas\\Desktop\\template.xlsx", "C:\\Users\\mpas\\Desktop\\result.xlsx");
using (FileStream fs = File.OpenWrite("C:\\Users\\mpas\\Desktop\\result.xlsx")) {
fs.Write(bin, 0, bin.Length);
}
答案 0 :(得分:1)
以下是打开现有文件的代码。
FileInfo AddressList = new FileInfo("c:\test\test.xlsx");
// Open and read the XlSX file.
try
{
using (ExcelPackage package = new ExcelPackage(AddressList))
{
// Get the work book in the file
ExcelWorkbook workBook = package.Workbook;
if (workBook != null)
{
if (workBook.Worksheets.Count > 0)
{
// Get the first worksheet
//ExcelWorksheet Worksheet = workBook.Worksheets.First();
var worksheet = package.Workbook.Worksheets[1];
答案 1 :(得分:1)
如果使用命名样式,EPPlus和大多数Excel API中的样式要快得多。在EPPlus中为样式分配和使用样式,就像这样......
internal static string YourStyleName = "MyStyle";
ExcelNamedStyleXml yourStyle = excel.Workbook.Styles.CreateNamedStyle(YourStyleName);
yourStyle.Style.Font.Color.SetColor(Color.DarkRed);
yourStyle.Style.Fill.PatternType = ExcelFillStyle.Solid;
yourStyle.Style.Fill.BackgroundColor.SetColor(Color.LemonChiffon);
// ...
sheet.Cells[sourceRange].StyleName = YourStyleStyleName