GVKun编程网logo

使用Java读取Excel工作表时出错(java读取excel表格并处理)

13

本篇文章给大家谈谈使用Java读取Excel工作表时出错,以及java读取excel表格并处理的知识点,同时本文还将给你拓展c#–“列超出范围”填充Excel工作表时出错、C#获取Excel工作薄中S

本篇文章给大家谈谈使用Java读取Excel工作表时出错,以及java读取excel表格并处理的知识点,同时本文还将给你拓展c# – “列超出范围”填充Excel工作表时出错、C# 获取Excel工作薄中Sheet页(工作表)名集合、Java 复制Excel工作表、Java 打印Excel工作表等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

使用Java读取Excel工作表时出错(java读取excel表格并处理)

使用Java读取Excel工作表时出错(java读取excel表格并处理)

我正在使用NetBeans 6.9.1使用Spring / Hibernet。我正在尝试读取Excel文件(.xlsx- Office
2007)。读取Excel文件的代码如下,使用Vactor来存储Excel工作表中的数据。

import java.io.FileInputStream;import java.util.Iterator;import java.util.Vector;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import model.NewHibernateUtil;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.hibernate.Session;import org.springframework.validation.BindException;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.SimpleFormController;private Vector importExcelSheet(ModelAndView mv){    Vector cellVectorHolder = new Vector();    try    {                 HSSFWorkbook myWorkBook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream("E:/Project/SpringHibernet/MultiplexTicketBookingNew/web/excelSheets/Country.xlsx")));        HSSFSheet mySheet = myWorkBook.getSheetAt(0);        Iterator rowIter = mySheet.rowIterator();        System.out.println(mySheet.getRow(1).getCell(0));        while(rowIter.hasNext())        {            HSSFRow myRow = (HSSFRow) rowIter.next();            Iterator cellIter = myRow.cellIterator();            Vector cellStoreVector=new Vector();            while(cellIter.hasNext())            {                HSSFCell myCell = (HSSFCell) cellIter.next();                cellStoreVector.addElement(myCell);            }            cellVectorHolder.addElement(cellStoreVector);        }    }    catch (Exception e)    {        mv.addObject("msg", e.getMessage());    }    return cellVectorHolder;}

以下是我的方法,该方法Controller调用上述方法以读取指定的Excel文件


@Overrideprotected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception{    ModelAndView mv=new ModelAndView();    try    {        if(request.getParameter("import")!=null)        {            session=NewHibernateUtil.getSessionFactory().getCurrentSession();            session.beginTransaction();            Vector dataHolder=importExcelSheet(mv);            for (int i=0;i<dataHolder.size(); i++)            {                Vector cellStoreVector=(Vector)dataHolder.elementAt(i);                for (int j=0; j < cellStoreVector.size();j++)                {                    HSSFCell myCell = (HSSFCell)cellStoreVector.elementAt(j);                    String st = myCell.toString();                    System.out.println(st.substring(0,1)+"\t");                }                System.out.println();            }            session.flush();            session.getTransaction().commit();        }    }    catch (Exception e)    {        mv.addObject("msg", e.getMessage());    }    return mv;}

在执行此代码时,将引发以下异常。

提供的数据似乎在Office 2007+ XML中。您正在调用POI中与OLE2
Office文档有关的部分。您需要调用POI的其他部分来处理此数据(例如XSSF而不是HSSF)

我使用的源错误还是上述代码有其他问题?解决办法是什么?

代码是从这里获取的。

答案1

小编典典

您的代码明确要求HSSF,因此仅适用于较旧的.xls(二进制)文件。

如果需要,您可以要求POI自动检测您拥有的文件类型,然后根据情况选择合适的HSSF或XSSF之一。但是,要做到这一点,您需要稍微更改代码,并使用接口而不是具体的类(因此,无论获取HSSF还是XSSF对象,代码都可以工作)

POI网站上有进行这些更改的指南,应指导您完成这些更改。

例如,当您遵循此步骤时,您的前几行是:

    HSSFWorkbook myWorkBook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream("E:/Project/SpringHibernet/MultiplexTicketBookingNew/web/excelSheets/Country.xlsx")));    HSSFSheet mySheet = myWorkBook.getSheetAt(0);    Iterator rowIter = mySheet.rowIterator();    System.out.println(mySheet.getRow(1).getCell(0));

将成为新系统:

    Workbook wb = WorkbookFactory.create(new File("/path/to/your/excel/file"));    Sheet mySheet = wb.getSheetAt(0);    Iterator<Row> rowIter = mySheet.rowIterator();    System.out.println(mySheet.getRow(1).getCell(0));

然后,这将适用于.xls和.xlsx文件

c# – “列超出范围”填充Excel工作表时出错

c# – “列超出范围”填充Excel工作表时出错

我刚刚开始实现这个,用一些数据填充Excel表格:
using OfficeOpenXml;

//..

   ExcelWorksheet VerificationSheet_Sheet4 = package.Workbook.Worksheets.Add("SheetTitleHere");
   int row = 0,col = 0;
   VerificationSheet_Sheet4.Cells[row + 1,col].Value = "AnyStringHere"; // error here

但是,它会弹出一个错误,表示列超出范围.为什么以及如何解决这个问题?

解决方法

Excel工作表使用基于1的索引而不是基于零的索引.因此,列和行都从1开始而不是0.

C# 获取Excel工作薄中Sheet页(工作表)名集合

C# 获取Excel工作薄中Sheet页(工作表)名集合

c#  获取excel工作薄中sheet页(工作表)名集合

  #region 获取Excel工作薄中Sheet页(工作表)名集合
        /// <summary> 
        /// 获取Excel工作薄中Sheet页(工作表)名集合
        /// </summary> 
        /// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xls</param> 
        /// <returns>Sheet页名称集合</returns> 
        private String[] GetExcelSheetNames(string fileName)
        {
            OleDbConnection objConn = null;
            System.Data.DataTable dt = null;
            try
            {
                string connString=string.Empty;
                string FileType =fileName.Substring(fileName.LastIndexOf("."));
                if (FileType == ".xls")  
                 connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
                else//.xlsx
                    connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";  
                // 创建连接对象 
                objConn = new OleDbConnection(connString);
                // 打开数据库连接 
                objConn.Open();
                // 得到包含数据架构的数据表 
                dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                if (dt == null)
                {
                    return null;
                }
                String[] excelSheets = new String[dt.Rows.Count];
                int i = 0;
                // 添加工作表名称到字符串数组 
                foreach (DataRow row in dt.Rows)
                {
                    string strSheetTableName = row["TABLE_NAME"].ToString();
                    //过滤无效SheetName
                    if (strSheetTableName.Contains("$")&&strSheetTableName.Replace("&#39;", "").EndsWith("$"))
                    {
                        excelSheets[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1);
                    }                   
                    i++;
                }
                return excelSheets;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return null;
            }
            finally
            {
                // 清理 
                if (objConn != null)
                {
                    objConn.Close();
                    objConn.Dispose();
                }
                if (dt != null)
                {
                    dt.Dispose();
                }
            }
        }
        #endregion
登录后复制

 以上就是C#  获取Excel工作薄中Sheet页(工作表)名集合的内容。

Java 复制Excel工作表

Java 复制Excel工作表

在日常操作Excel文档时,经常会遇到需要复制工作表的情况,以此来节省时间,提高工作效率。根据复制需求不同,一般我们可将其分为以下两类:

1、 复制工作表(保留原有工作表格式)

  • 在同一个文档内复制工作表
  • 在不同文档间复制工作表

2、 复制单元格

  • 复制指定单元格数据(保留原有单元格格式)
  • 复制带有公式的单元格时只保留公式值

同时,对于复制方法copy(),以下是包含了对数据复制的不同应用方法的表格,可供参考:

方法释义
copyFrom(Worksheet worksheet)复制自源工作表的数据
copy(CellRange sourceRange, CellRange destRange)复制源数据到目标数据范围
copy(CellRange sourceRange, CellRange destRange, Boolean copyStyle)复制源数据到目标数据范围时,是否复制源数据样式
copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn)复制源数据到目标工作表中的指定行和列
copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn, Boolean copyStyle)复制源数据到目标工作表中的指定行和列时,是否复制源数据样式
copy(CellRange sourceRange, CellRange destRange, Boolean copyStyle, Boolean updateReference, Boolean ignoreSize)复制源数据到目标数据范围时,是否复制源数据样式,是否更新引用,是否忽略大小
copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn, boolean copyStyle, boolean undateReference)复制源数据到目标工作表中的指定行和列时,是否复制源数据样式,是否更新引用
copy(CellRange sourceRange, CellRange destRange, boolean copyStyle, boolean updateReference, boolean ignoreSize, boolean copyShape)复制源数据到目标数据范围时,是否复制源数据样式,是否更新引用,是否忽略大小,是否复制形状

环境搭建:

方式1:通过官网下载Jar包。解压文档后将lib文件夹下的Spire.Xls.jar导入IDEA中。具体操作步骤参见下图。
image

方式2:通过maven安装产品及导入相关依赖。详细步骤可参考此教程。

代码示例

1、复制工作表

  • 在同一文档内复制工作表
import com.spire.xls.*;
public class CopyWorksheet1 {
    public static void main(String[] args) {
        //加载文档
        Workbook wb = new Workbook();
   wb.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        //获取第一张工作表
        Worksheet sheet0 = wb.getWorksheets().get(0);
        //获取第二张工作表,命名,并将第一张工作表内容复制到该工作表
        Worksheet sheet2 = wb.getWorksheets().get(1);
        sheet2.setName("Copiedsheet");
        sheet2.copyFrom(sheet0);
        //保存文档
    wb.saveToFile("output/Copy1.xlsx",FileFormat.Version2013);
    }
}

复制效果:

image

  • 在不同文档间复制
import com.spire.xls.*;
public class CopyWorksheet2 {
    public static void main(String[] args) {
        //加载文档1,并获取第一张幻灯片
        Workbook wb1 = new Workbook();
     wb1.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        Worksheet sheet1 = wb1.getWorksheets().get(0);
        //加载文档2,获取第二张幻灯片,并将文档1中的工作表内容复制到该工作表
        Workbook wb2 = new Workbook();
    wb2.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample2.xlsx");
        Worksheet sheet2 = wb2.getWorksheets().get(1);
        sheet2.setName("Copied");
        sheet2.copyFrom(sheet1);
        //保存文档
   wb2.saveToFile("output/Copy2.xlsx",FileFormat.Version2013);
    }
}

复制效果:

image

2、复制单元格

  • 直接复制单元格数据范围
import com.spire.xls.*;
public class CopyCells1 {
    public static void main(String[] args) {
        //加载文档
        Workbook wb = new Workbook();
     wb.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        //获取第一个工作表
        Worksheet sheet = wb.getWorksheets().get(0);
        //复制指定单元格范围中的数据
        CellRange range1 = sheet.getCellRange(11,1,17,3);
        CellRange range2 = sheet.getCellRange(20,1,26,3);
        sheet.copy(range1,range2,true);
        //保存文档
 wb.saveToFile("output/CopyCells1.xlsx",FileFormat.Version2013);
    }
}

复制效果:

image

  • 复制带公式的单元格时只保留公式值
import com.spire.xls.*;
import java.util.EnumSet;

public class copycell {
    public static void main(String[] args) {
        //加载Excel工作簿
        Workbook wb = new Workbook();
     wb.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        //获取工作表
        Worksheet sheet = wb.getWorksheets().get(0);
        //设置复制单元格选项为仅复制公式值
        CopyRangeOptions copyOptions = CopyRangeOptions.OnlyCopyFormulaValue;
        //复制指定单元格到目标单元格
        sheet.copy(sheet.getCellRange("F3:F18"), sheet.getCellRange("K3:K18"), EnumSet.of(copyOptions));
        //保存文档
wb.saveToFile("output/CopyCellsValue.xlsx",FileFormat.Version2013);
        wb.dispose();
    }
}

复制效果:

image

(本文完)

Java 打印Excel工作表

Java 打印Excel工作表

示例要点

本文介绍如何通过Java程序打印Excel工作表。可通过以下方法打印:

  1. 默认打印机打印
  2. 指定打印机打印

 

程序环境

  • spire.xls.jar
  • JDK版本要求1.6.0及以上的高版本
  • IDEA

 

Jar文件导入

方法1:手动下载jar包导入。下载jar包,并解压到指定路径,将该路径下lib文件夹下的jar文件导入java程序;

方法2Maven程序中配置pom.

<repositories> <repository>  <id>com.e-iceblue</id>  <url></url>  </repository></repositories><dependencies><dependency>  <groupId>e-iceblue</groupId> <artifactId>spire.xls</artifactId> <version>3.11.2</version></dependency></dependencies>

完成配置后,导入jar。Eclipse中的导入方法可参考教程文档

jar导入效果图:

 

Java代码

1. 默认打印机打印

import com.spire.xls.*;import java.awt.print.PageFormat;import java.awt.print.Paper;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;public class Print { public static void main(String[] args) {  //加载excel工作簿  Workbook workbook = new Workbook();  workbook.loadFromFile("test.xlsx");  //创建 PrinterJob对象  PrinterJob printerJob = PrinterJob.getPrinterJob();  //指定打印页面为默认大小和方向  PageFormat pageFormat = printerJob.defaultPage();  //设置相关打印选项  Paper paper = pageFormat.getPaper();  paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());  pageFormat.setPap.........

关于使用Java读取Excel工作表时出错java读取excel表格并处理的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c# – “列超出范围”填充Excel工作表时出错、C# 获取Excel工作薄中Sheet页(工作表)名集合、Java 复制Excel工作表、Java 打印Excel工作表的相关知识,请在本站寻找。

本文标签: