epplus之值写不进去解决方案

一、背景

今天在C#中使用epplus给excel表格写入值时,发现其他行的值都可以正常写入,但是有一行值不能写入,并且这行如果之前有值,也会在保存excel之后,值被清空。

二、解决思路

将当前所引用的epplus组件升级为最新的稳定版。
源代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OfficeOpenXml;
using System.IO;

namespace InsertValueIntoExcelWithEpplus
{
    class Program
    {
        static void Main(string[] args)
        {
            //Excel文件所在的地址
		    FileInfo fileInfo= new FileInfo(@"xxx.xlsx");
            using (ExcelPackage excelPackage= new ExcelPackage(fileInfo))
            {
                //指定需要写入的sheet名
                ExcelWorksheet excelWorksheet= excelPackage.Workbook.Worksheets["sheet名字"];
                //比如修改第一行,第一列的值为 0
                excelWorksheet.Cells[1, 1].Value = 0;
                //修改第一行,第二列的值为 你好
                excelWorksheet.Cells[1, 2].Value = "你好";
                //然后保存即可
                excelPackage.Save();
            }
        }
    }
}

以前写入都好好的,不知道这次为什么写不进去。
解决方案:当前所用的epplus版本是4.5.3.1,删除了epplus4.5.3.1,然后通过nuget安装了最新的稳定版5.1.2.0,这个时候就可以正常写入了。这应该是epplus4.5.3.1的一个bug,找了好久,通过换epplus版本才解决!

三、注意事项

1.当找不到程序的bug时,有可能是组件自身的bug,尝试升级为最新的组件,看能否解决问题,举一反三。
2.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出BIM相关软件开发、移动互联网开发以及游戏编程干货;
3.欢迎加入BIM行业开发交流群,获取更多开发资料 群号:711844216
4.欢迎加入U3D魔法师交流群,共同学习进步,群号:1105535938

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Epplus 导出 Excel 表格时,如果不希望某些列被导出,可以使用 EpplusIgnoreColumn 特性来标记这些列。具体步骤如下: 1. 定义一个包含需要导出的数据的类,例如: ``` public class MyData { public string Column1 { get; set; } public string Column2 { get; set; } [EpplusIgnoreColumn] public string Column3 { get; set; } } ``` 2. 在需要导出数据的方法中,使用 Epplus 来生成 Excel 表格。在设置表格列时,使用 EpplusTableColumn 特性来设置列头信息,使用 EpplusIgnoreColumn 特性来标记不需要导出的列,例如: ``` var data = new List<MyData> { ... }; var package = new ExcelPackage(); var worksheet = package.Workbook.Worksheets.Add("Sheet1"); worksheet.Cells.LoadFromCollection(data, true, TableStyles.Light1); foreach (var prop in typeof(MyData).GetProperties()) { if (prop.GetCustomAttribute<EpplusIgnoreColumn>() != null) { worksheet.DeleteColumn(prop.GetIndexParameters()[0].DefaultValue + 1); } else { var col = worksheet.Column(prop.GetIndexParameters()[0].DefaultValue + 1); col.Style.Numberformat.Format = "@"; col.AutoFit(); col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left; col.Style.VerticalAlignment = ExcelVerticalAlignment.Center; col.Style.WrapText = true; var header = prop.GetCustomAttribute<EpplusTableColumn>(); if (header != null) { col.Header = header.Header; col.Width = header.Width; } } } ``` 其中,第一步中的 MyData 类中使用了 EpplusIgnoreColumn 特性来标记 Column3 列不需要导出。第二步中,使用了 GetCustomAttribute 方法来获取属性上的特性,并根据特性是否存在来判断该列是否需要导出。如果不需要导出,则使用 DeleteColumn 方法来删除该列;否则,使用 Column 方法来获取该列,并设置列的样式、列头信息等。 通过使用 EpplusIgnoreColumn 特性,可以方便地控制导出的 Excel 表格中包含哪些列,从而实现更加灵活的数据导出功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值