使用NPOI修改Excel数据

这篇具有很好参考价值的文章主要介绍了使用NPOI修改Excel数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:格式为exp的文件,具有json结构,替换掉其中某些数据
解决方法:读取excel,用npoi读取指定内容,在exp中找到特定结构,然后替换

读取excel文件

读取其他格式的文件也是用此方法文章来源地址https://www.toymoban.com/news/detail-711607.html

public void OpenExcel()
{
    Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
    if (openFileDialog.ShowDialog() == true)
    {
        ExcelPath = openFileDialog.FileName;
    }
}

关键代码

找到json的特定结构,替换数据

{
  "Name": "Raw Data",
  "Version": "",
  "FieldName": "TakeOffPointID,CurveID,CurveData",
  "FieldType": "i,s,arr",
  "Data": null,
  "DataList": [
    "-1,A01.Green,32231.000 32695.000 31543.000 31639.000 31623.000 31367.000 31271.000 30807.000 30007.000 29895.000 29911.000 30103.000 29559.000 29607.000 29415.000 29735.000 29799.000 29495.000 29463.000 29015.000 29287.000 29639.000 30375.000 32071.000 35704.000 42474.000 51324.000 60334.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000 65535.000",]
}
// 使用正则表达式查找目标 JSON 结构
string pattern = $@"\{{[^{{}}]*""Name"":\s*""{sheetName}""[^{{}}]*\}}";
System.Text.RegularExpressions.Match match = Regex.Match(json, pattern, RegexOptions.Singleline);
if (match.Success)
{
    // 获取匹配的 JSON 结构
    string jsonStructure = match.Value;

    // 解析 JSON 数据
    JObject jObject = JObject.Parse(jsonStructure);

    // 查找 "DataList" 数组并替换内容
    JArray dataList = (JArray)jObject["DataList"];

    // 替换 "DataList" 的内容
    dataList.ReplaceAll(newDataList.Select(item => new JValue(item)));

    // 更新 JSON 结构
    string updatedJsonStructure = jObject.ToString(Formatting.None);

    // 替换原始文本中的 JSON 结构
    json = Regex.Replace(json, pattern, updatedJsonStructure);
}

全部代码

public partial class XlsxToExpViewModel : ObservableObject
{
    [ObservableProperty] private string _excelPath = @"C:\Users\63214\Desktop\20220809_160644C15256.xlsx";
    [ObservableProperty] private string _expPath = @"C:\ProgramData\Virtue\Experiment\20220809_160644C.exp";
    [ObservableProperty] private string _newExpPath = @"C:\Users\63214\Desktop\newExp.exp";
    [ObservableProperty] private double _schedule = 0;

    public XlsxToExpViewModel()
    {

    }

    #region Excel
    [RelayCommand]
    public void OpenExcel()
    {
        Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
        if (openFileDialog.ShowDialog() == true)
        {
            ExcelPath = openFileDialog.FileName;
        }
    }

    [RelayCommand]
    public void OpenExp()
    {
        Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
        if (openFileDialog.ShowDialog() == true)
        {
            ExpPath = openFileDialog.FileName;
        }
    }

    [RelayCommand]
    public void Export()
    {
        //配置文件目录
        string dict = null;
        //IOUtil.Exists(dict);
        Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog()
        {
            Title = "请选择导出配置文件...",            //对话框标题
            Filter = "Exp Files(*.exp)|*.exp",    //文件格式过滤器
            FilterIndex = 1,                          //默认选中的过滤器
            FileName = "newfile",                      //默认文件名
            DefaultExt = "exp",                      //默认扩展名
            InitialDirectory = dict,                  //指定初始的目录
            OverwritePrompt = true,                   //文件已存在警告
            AddExtension = true,                      //若用户省略扩展名将自动添加扩展名
        };
        if (sfd.ShowDialog() == true)
        {
            NewExpPath = sfd.FileName;
        }
    }

    [RelayCommand]
    public void GenerateNewExpFile()
    {
        if (File.Exists(NewExpPath))
        {
            File.Delete(NewExpPath);
            Console.WriteLine("文件已删除。");
        }

        // 指定要读取的工作表名称
        List<string> listSheet = new List<string>() { "Raw Data", "Calibrated Data", "Amplification Data" };
        string json = File.ReadAllText(ExpPath);
        foreach (string sheetName in listSheet)
        {
            try
            {
                // 使用FileStream打开Excel文件
                using (FileStream fs = new FileStream(ExcelPath, FileMode.Open, FileAccess.ReadWrite))
                {
                    // 使用XSSFWorkbook打开.xlsx文件(如果是.xls文件,使用HSSFWorkbook)
                    IWorkbook workbook = new XSSFWorkbook(fs);

                    // 获取指定工作表
                    ISheet sheet = workbook.GetSheet(sheetName);

                    if (sheet != null)
                    {
                        List<string> newDataList = new List<string>();

                        // 获取指定sheet的内容并添加到list集合
                        // 遍历列
                        for (int columnIndex = 1; columnIndex < sheet.GetRow(0).LastCellNum; columnIndex++)
                        {
                            string data = "-1," + sheet.GetRow(0).GetCell(columnIndex) + ",";
                            //string data = "-1,";
                            // 遍历行
                            for (int row = 1; row <= sheet.LastRowNum; row++)
                            {
                                IRow currentRow = sheet.GetRow(row);

                                if (currentRow != null)
                                {
                                    ICell cell = currentRow.GetCell(columnIndex);

                                    if (cell != null)
                                    {
                                        // 获取单元格的值(假设它是文本)
                                        string cellValue = Convert.ToDouble(cell.ToString()).ToString("F3") + " ";
                                        data += cellValue;
                                    }
                                }
                            }
                            newDataList.Add(data);
                        }
                        // 使用正则表达式查找目标 JSON 结构
                        string pattern = $@"\{{[^{{}}]*""Name"":\s*""{sheetName}""[^{{}}]*\}}";
                        System.Text.RegularExpressions.Match match = Regex.Match(json, pattern, RegexOptions.Singleline);
                        if (match.Success)
                        {
                            // 获取匹配的 JSON 结构
                            string jsonStructure = match.Value;

                            // 解析 JSON 数据
                            JObject jObject = JObject.Parse(jsonStructure);

                            // 查找 "DataList" 数组并替换内容
                            JArray dataList = (JArray)jObject["DataList"];

                            // 替换 "DataList" 的内容
                            dataList.ReplaceAll(newDataList.Select(item => new JValue(item)));

                            // 更新 JSON 结构
                            string updatedJsonStructure = jObject.ToString(Formatting.None);

                            // 替换原始文本中的 JSON 结构
                            json = Regex.Replace(json, pattern, updatedJsonStructure);
                        }
                        else
                        {
                            Console.WriteLine("未找到目标结构.");
                        }
                    }
                    else
                    {
                        Console.WriteLine("工作表 " + sheetName + " 不存在.");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("发生错误: " + ex.Message);
            }
        }
        // 保存更新后的文本文件
        File.WriteAllText(NewExpPath, json);
        MessageBoxX.Show(Application.Current.MainWindow, "新文件已生成!", "提示", MessageBoxButton.OK, MessageBoxIcon.Success, DefaultButton.YesOK, 5);
    }
    #endregion
}

到了这里,关于使用NPOI修改Excel数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 使用NPOI操作EXCEL

    1.添加NOPI         引用-管理NuGet程序包-添加NOPI 2.相关程序集 3.添加命名空间 4.从Excel导入的dgv样例 5.从dgv导入到Excel

    2024年02月11日
    浏览(46)
  • 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器

    一、引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求。然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可能会面临挑战。为了解决这个问题,开源库NPOI应运而生,它提供了无需安装Office即可创建、读取和修改Excel (.xls, .xlsx) 和

    2024年03月18日
    浏览(28)
  • .NET Core6.0使用NPOI导入导出Excel

    一、使用NPOI导出Excel //引入NPOI包 HTML JS C# 二、使用NPOI导入Excel HTML JS C# 控制器代码 添加ExcelHelper类 添加Extensions类 添加实体类UserEntity,要跟Excel的列名一致 Excel模板 实现效果

    2024年02月12日
    浏览(28)
  • C#【必备技能篇】使用NPOI实现对excel的读取和写入

    依次执行下图中的1-6按钮 , 可以通过查看程序文件夹中的excel文件来加深理解。 链接:https://pan.baidu.com/s/19PgQMhCKviw9aBAjmJHSww 提取码:2omi 需要在源码中增加如下引用。相应的dll已更新到 5 的下载地址中。

    2023年04月13日
    浏览(28)
  • 【工具插件类教学】NPOI插件使用Excel表格的导入和导出(包含图片)

    目录 一.导入Excel 解析读取 1.选择导入的目标文件 2.解析读取导入的文件

    2024年01月16日
    浏览(39)
  • Unity 使用NPOI,模板替换Excel中的关键字(针对.xlsx)

    Unity 使用NPOI,模板替换Excel中的(针对.xlsx) 需求:项目中要用到生成Excel来打印文件,只需要替换其中的值,保留原模板,生成新的Excel 第一步:在unity中导入一下的dll 新建一个Plugin的文件夹,把dll全部放进去 以上选中的这些文件在unity的安装目录下 UnityEditorData

    2023年04月24日
    浏览(32)
  • vue 实现前端处理 “数组数据“ 转excel格式文件,并导出excel表格

    一、安装插件 XLSX 二、页面引入        希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

    2024年01月18日
    浏览(39)
  • Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

    ①首先需要在网上下载相应whl的安装包 (注意:一定要保证版本与Python解释器版本一致,比如我的解释器是3.11版本,电脑是windows64位的系统,那么就选择netCDF4-1.6.5-cp311-cp311-win_amd64.whl进行下载) 在网上看到过一些下载地址,但是好多没法用,这里提供一个,不需要梯子:

    2024年04月28日
    浏览(28)
  • Unity用NPOI创建Exect表,保存数据,和修改删除数据。以及打包后的坑——无法打开新创建的Exect表

    先说坑花了一下午才找到解决方法解决, 在Unity编辑模式下点击物体创建对应的表,获取物体名字与在InputText填写的注释数据。然后保存。创建Exect表可以打开,打包PC后, 点击物体创建的表, 打不开文件破损 解决方法: 到unity编辑器所在路径中去找这个路径 EditorDataMon

    2024年02月12日
    浏览(41)
  • Unity使用NPOI库操作Word文件

    1、导入NPOI库的DLL 链接:https://pan.baidu.com/s/1O29nSZdBsNM8hP_f6-bH1A?pwd=6666 提取码:6666 –来自百度网盘超级会员V4的分享 2、将类库文件导入到Plugins文件夹目录下,类库文件要放在Plugins文件夹里面才能在C#引用 3、设置.NET版本,如果不是4.x可能会出现不兼容的问题,这个不一定,看

    2024年03月27日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包