问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】...

2023-05-16

现象:

点"是(Y)"

提示信息中提到的error242440_02.xml文件:

 

问题重现:


package poi;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class FoundUnreadRecord {

    public static void main(String[] args) throws IOException {
        int rowNum = 1;
        createExcel_Reference(rowNum);
        createExcel_WithTips(rowNum);
        
        rowNum = 0;
        createExcel_Reference(rowNum);
        createExcel_WithTips(rowNum);
    }

    private static void createExcel_Reference(int rowNum) throws FileNotFoundException,
            IOException {
        String fileName = "UnreadRecordTips_Reference"+rowNum+".xlsx";
        
        XSSFWorkbook wb = new XSSFWorkbook();        
        Sheet sheet = wb.createSheet("UnreadRecordTips");
        for (int i = 0; i <= rowNum; i++) {
            Row row = sheet.createRow(i);
            Cell cell = row.createCell(0);
            cell.setCellValue("test" + i);
        }

        write(fileName, wb);
    }

    private static void createExcel_WithTips(int rowNum) throws FileNotFoundException,
            IOException {
        String fileName = "UnreadRecordTips"+rowNum+".xlsx";;
        XSSFWorkbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet("UnreadRecordTips");
        for (int i = 0; i <= rowNum; i++) {
            Row row = sheet.createRow(i);
            Cell cell = row.createCell(0);
            cell.setCellValue("test" + i);
            sheet.addMergedRegion(new CellRangeAddress(0, rowNum, 0, 0));
        }
        write(fileName, wb);
    }

    private static void write(String fileName, XSSFWorkbook wb)
            throws FileNotFoundException, IOException {
        OutputStream stream = new FileOutputStream(fileName);
        wb.write(stream);
        stream.close();
    }
}  
分析及原因:
 
org.apache.poi.xssf.usermodel.XSSFWorkbook下进行合并单元格操作,

org.apache.poi.ss.util.CellRangeAddress.CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
中涉及的单元格,如果对其中任何一个单元格进行超过一次addMergedRegion操作,则生成的excel打开时,会出现以上提示。
TIPS:
(1)org.apache.poi.hssf.usermodel.HSSFWorkbook.HSSFWorkbook()无此问题。可能是因为XSSFWorkbook是基于OOXML(.xlsx) file format
(2)POI进行一次addMergedRegion操作,每Cell中值仍然可以读取,只是在Excel中没有显示

 


package poi;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class MergedRegionReadHiddenValue {

    private static final String sheetName="mergedRegion";

    public static void main(String[] args) throws IOException {
        Workbook wb;
        wb=new HSSFWorkbook();
        String fileName="mergedRegion.xls";
        createExcelWithMergedRegion(wb,fileName);
        InputStream s=new FileInputStream(fileName);
        wb=new HSSFWorkbook(s);
        travelSheet(wb, sheetName);
        s.close();
        
        System.out.println("xls End.=========================xlsx Begin");
        
        wb=new XSSFWorkbook();
        fileName="mergedRegion.xlsx";
        createExcelWithMergedRegion(wb,fileName);
        s=new FileInputStream(fileName);
        wb=new XSSFWorkbook(s);
        travelSheet(wb, sheetName);
        s.close();
    }

    private static void createExcelWithMergedRegion(Workbook wb,String fileName)
            throws FileNotFoundException, IOException {

        Sheet sheet=wb.createSheet(sheetName);
        int lastRowNum=2;
        for (int i=0;i<=lastRowNum;i++) {
            createRowFillValue(sheet,i);
        }
        sheet.addMergedRegion(new CellRangeAddress(0, lastRowNum, 0, 0));
        write(wb, fileName);
    }

    private static void travelSheet(Workbook wb, String sheetName) {
        Sheet sheet;
        sheet=wb.getSheet(sheetName);
        for (Row row : sheet) {
            System.out.println(row.getCell(0).getStringCellValue());
        }
    }

    private static void write(Workbook wb, String fileName)
            throws FileNotFoundException, IOException {
        OutputStream stream=new FileOutputStream(fileName);
        wb.write(stream);
        stream.close();
    }

    private static void createRowFillValue(Sheet sheet,int rowIdx) {
        Row row=sheet.createRow(rowIdx);
        Cell cell=row.createCell(0);
        cell.setCellValue("CellValue,"+rowIdx+",0");;
    }

}  

OutPut:


CellValue,0,0
CellValue,1,0
CellValue,2,0
xls End.=========================xlsx Begin
CellValue,0,0
CellValue,1,0
CellValue,2,0  

生成的Sheet内容示例:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】... 的相关文章

  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • JasperReports 中每个工作表属性一页

    我有一个要求 我必须在 JasperReports 中设计一个报告 该报告有 4 页 第一张纸有 5 页 类似的其他纸有一页或两页 我面临的问题是 如果我使用net sf jasperreports export xls one page
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • 两个日期之间的小时数在 Excel 中不起作用

    根据要求 我提供了一张简化的屏幕截图来说明该问题 如您所见 我减去了两个日期并将其格式化为 h mm ss 为什么这不能提供两个日期之间经过的总小时数 有一个更好的方法吗 下面有一个很好的答案 但我试图弄清楚为什么按照此屏幕截图中所示的方式
  • 在 PYTHON 中读取 EXCEL 时,“utf-16-le”编解码器无法解码字节

    我正在尝试读取不同语言 阿拉伯语 希腊语 意大利语 希伯来语等 的各种数量的 xls 文件 当我尝试调用 open workbook 函数时 出现如下所示的错误 不知道如何将格式设置为任何语言 Code book xlrd open wor
  • SQL Excel VBA 运行时错误 3709 无效连接

    这是我的第一个问题 欢迎提出建设性的批评 我正在尝试从 Excel VBA 查询 Access 数据库并将返回信息放入 Excel 范围中 我收到此错误 错误消息 运行时错误 3709 连接无法用于 执行此操作 在此情况下它已关闭或无效 语
  • 有没有更快的方法来使用Powershell解析Excel文档?

    我正在与一个接口MS Excel文件通过Powershell 每个 Excel 文档可能有大约 1000 行数据 目前这个脚本似乎读取了Excel文件并以每 0 6 秒 1 条记录的速率将值写入屏幕 乍一看 这似乎非常慢 这是我第一次阅读E
  • 如何使用vba复制Excel工作表中的动态范围

    我试图使宏中的范围是动态的 而不指定最后一行x Sheets SheetName Range A2 K1000 Copy在 1000 行中 我想将其更改为动态 因为有时我的数量会更少或更多 尝试这个 Sub Test Dim lRow as
  • 将 MS 转换为秒

    我发现这个公式可以用来将 MS 转换为秒 但它是为 Excel 2002 编写的 而我正在使用 2010 CONCATENATE TEXT INT B1 1000 86400 hh mm ss B1 INT B1 1000 1000 以下是
  • 数据透视表错误 |无效的调用或过程

    我需要一些帮助来解决这个问题 我正在尝试创建一个数据透视表 从第一季度开始 在同一张表中包含一系列数据 第一个 if 语句在那里是因为最后一列并不总是包含标题 所以我将其包含在那里 我希望范围是动态的 因为所制作的表格的大小将根据工作表中数
  • Vlookup 引用不同工作表中的表数据

    我想用一个VLOOKUP函数引用了放置在与所在工作表不同的工作表中的数据表VLOOKUP书面的功能 示例 在工作表 1 的单元格 AA3 中 我想插入VLOOKUP功能 我希望该函数检查单元格 M3 中的数字 在工作表 2 范围地址 A2
  • 使用 PhpSpreadsheet PHP 设置单元格边框样式

    我使用 PhpSpreadsheet 来读取或写入 Excel 文件 我想向我的 Excel 添加边框样式 所以我使用了以下代码
  • 从Excel工作表中读取汉字? (总是返回“???”)

    如何从Excel单元格中读取汉字并将其写入文件 当我取值时 Worksheets ActiveCell Worksheet Name Cells 3 columnNumbers 0 value 它总是返回 Dim fileStream Fi
  • 索引行和列意外结果

    我试图理解以下行为 如果我有以下数据 A B a 1 b 2 c 3 如果我使用 INDEX A 1 B 3 它将正确显示整个范围 如果我使用 INDEX A 1 B 3 1 它将正确显示两列第一行的数据 如果我使用 INDEX A 1 B
  • 生成Excel文件错误

    我在经典 ASP 中使用以下代码生成 Excel 文件 代码很简单并且有效 我在 Windows Vista x86 上的 IIS 7 0 下运行代码 两个问题 有一个奇怪的警告框 这是屏幕快照 http i27 tinypic com 2
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • Office 365 中 Excel 中 Power Pivot 的计算列中正确的 DAX GROUPBY 语法是什么

    将以下语法输入到下面在 Excel Office 365 版本 的 powerpivot 中提供的表 Visits 的计算列公式中 GROUPBY Visits Patient Name First Visit Date MINX CURR
  • 从 X、Y、Z 数据、Excel 或其他工具进行 3D 绘图

    我的数据看起来像这样 1000 13 75 2 1000 21 79 21 1000 29 80 02 5000 29 87 9 5000 37 88 54 5000 45 88 56 10000 29 90 11 10000 37 90
  • Excel VSTO 工作簿新活动

    在 Excel 2007 的一个 Excel 插件项目中 我需要检查创建新工作簿的事件 我还需要捕捉 Workbook Open 事件 我很容易做到这一点 在我在互联网上的研究中 我发现了以下内容 打开任何工作簿时都会引发 Applicat
  • 如何在不使用外部库(如Numpy、Pandas)的情况下读取CSV文件?

    这是面试中经常出现的问题 我知道如何使用读取 csv 文件Pandas 然而 我正在努力寻找一种在不使用外部库的情况下读取文件的方法 Python 是否带有任何可以帮助读取 csv 文件的模块 你最有可能将需要用于读取 CSV 文件的库 虽

随机推荐

  • 解决vuepress报Error: Cannot find module ‘core-js/library/fn/object/assign问题(core-js版本与引入UI冲突问题)

    问题如图 原因 core js版本原因 解决方案 第一种 xff0c 在config文件 xff08 路径docs vuepress config js xff09 中加上以下代码 span class token function cha
  • SD-WAN与SDN:差异在于细节

    SD WAN和SDN xff1a 在很多方面类似 xff0c 从 SD 开始 SD WAN和SDN都有共同的遗产 xff0c 从控制平面和数据平面的分离开始 两者都设计为在商用x86硬件上运行 xff0c 两者都可以虚拟化 xff0c 并且
  • Linux命令模拟Http的get或post请求

    Http请求指的是客户端向服务器的请求消息 xff0c Http请求主要分为get或post两种 xff0c 在Linux系统下可以用curl和wget命令来模拟Http的请求 get请求 xff1a 1 使用curl命令 xff1a cu
  • 使用Python实现Hadoop MapReduce程序

    转自 xff1a 使用Python实现Hadoop MapReduce程序 英文原文 xff1a Writing an Hadoop MapReduce Program in Python 根据上面两篇文章 xff0c 下面是我在自己的ub
  • windows+R键的应用

    windows 43 R 然后输入以下几个命令 1 cmd 用于Windows命令行操作 比如 ping某个网络 看看是不是通的 或者directory等等Windows命令行操作 2 远程桌面连接 mstsc 3 dxdiag 是Wind
  • 用命令行方式关闭linux防火墙

    sbin iptables I INPUT p tcp dport 80 j ACCEPT sbin iptables I INPUT p tcp dport 22 j ACCEPT etc rc d init d iptables sav
  • cenotos 7桌面环境装mysql_CenotOS Linux 5 下Oracle 10g安装指南

    收集整理了一篇比较完美的CenotOS Linux 5 下Oracle 10g安装教程 分享个朋友们 xff01 Author xff1a David Young e4twood 64 gmail com Last 收集整理了一篇比较完美的
  • Curl命令使用解析大全

    自己翻译了好几天 xff0c 希望大家多多指正 linux下wget使用命令解析大全 名称 curl 传输URL 概要 curl 选项 URL 描述 curl是一个可以从服务器传输数据或者传输数据到一个服务器的工具 xff0c 支持以下协议
  • java核心技术读书笔记

    对象的三个特征 对象的行为 可以对对象施加哪些操作 或者可以对对象施加哪些方法 对象的状态 当施加哪些方法时 对象如何响应 对象的标识 如何辨别具有相同行为与状态的不同的对象 对象的行为是用可调用的方法定义的 对象的状态每个对象保存着描述当
  • centos vnc配置笔记

    1 首先查询是否安装VNC Server rpm qa grep vnc 如果有类似于 xff1a vnc server 的值返回说明已经安装了vnc server 如果没有安装采用yum安装 yum y install vnc 2 配置V
  • ONF解决方案与合作伙伴副主席Aseem Parikh:CORD的社区增长概况及全球发展趋势

    由天地互连 下一代互联网国家工程中心主办的 2017全球SDNFV技术大会 xff08 2017 chinasdn org xff09 于 2017年8月2 3日 xff0c 在北京国宾酒店火热开幕 在3日上午的大会中 xff0c ONF解
  • 视觉语言导航综述Visual Language Navigation

    abstract 视觉语言导航任务 Visual Language Navigation 是让智能体跟着自然语言指令进行导航 xff0c 这个任务需要同时理解自然语言指令与视角中可以看见的图像信息 xff0c 然后在环境中对自身所处状态做出
  • Android 8.0 系统编译解决卡在Ensuring Jack server is installed and started

    参考 xff1a https www cnblogs com zzb Dream 90Time p 9273844 html 这个解决方法是比较全的 xff0c 但是我所有操作都做了 xff0c 依然无法正常编译 解决这个问题花了我2天时间
  • [转]以下划线开头的变量名

    C 43 43 系 统头文件里将宏名 变量名 内部函数名用 开 头就是为了避免与用户用的名字冲突 因为当你 xff03 i nclude 系 统头文件时 xff0c 这些文件里的名字都有了定义 xff0c 如果与你用的名字冲突 xff0c
  • 爬虫所需要的爬虫代理ip究竟是什么?

    爬虫所需要的爬虫代理ip究竟是什么 当我们对某些网站进行爬去的时候 xff0c 我们经常会换IP来避免爬虫程序被封锁 其实也是一个比较简单的操作 xff0c 目前网络上有很多IP代理商 xff0c 例如西刺 xff0c 芝麻 xff0c 犀
  • DirectUI的初步分析

    最近由于项目的需要学习了一下DirectUI方面的东西 主要借鉴的是一个国外程序员写的代码 见引用一 看了后发现它更多的是探讨一种实现的可能性和思路 和实际应用还是有距离的 不过其实现还是很有意思的 在写此小结的时候又发现国内一个程序员将这
  • pcnet32 device eth0 does not seem to be present网卡无法激活

    前一段跟着老师上课的时候学习模块的内容 xff0c 当时不知道无意中动了哪个模块 xff0c 导致无法启动网卡 系统启动日志 xff1a Bringing up interface eth0 pcnet32 device eth0 does
  • Nodejs版本管理方法

    简介 我以前写过关于Nodejs的版本管理 那个时候使用的是n来管理 但是n会在home目录下创建的安装目录不是隐藏的 所以对于我这个强迫症来说就很烦 所以现在就来说说nvm这个nodejs的版本管理工具 安装 安装很简单 一个命令搞定 使
  • 企业面试题:查找/oldboy下所有7天以前以log结尾的文件移动/tmp下。

    企业必考面试题 xff1a 查找 oldboy目录下所有7天以前的以log结尾的文件移动到 tmp下 要求 xff1a 请给出至少三种实现方法 xff0c 有能力的朋友试试看 xff01 工作做事给老大 xff0c 给面试官多种方案 xff
  • 问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】...

    现象 xff1a 点 34 是 Y 34 提示信息中提到的error242440 02 xml文件 xff1a 问题重现 xff1a package poi import java io FileNotFoundException impo