本篇文章给大家谈谈使用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表格并处理)
- c# – “列超出范围”填充Excel工作表时出错
- C# 获取Excel工作薄中Sheet页(工作表)名集合
- 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工作表时出错
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
但是,它会弹出一个错误,表示列超出范围.为什么以及如何解决这个问题?
解决方法
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("'", "").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工作表
在日常操作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中。具体操作步骤参见下图。
方式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);
}
}
复制效果:
- 在不同文档间复制
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);
}
}
复制效果:
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);
}
}
复制效果:
- 复制带公式的单元格时只保留公式值
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();
}
}
复制效果:
(本文完)
Java 打印Excel工作表
示例要点
本文介绍如何通过Java程序打印Excel工作表。可通过以下方法打印:
- 默认打印机打印
- 指定打印机打印
程序环境
- spire.xls.jar
- JDK版本要求1.6.0及以上的高版本
- IDEA
Jar文件导入
方法1:手动下载jar包导入。下载jar包,并解压到指定路径,将该路径下lib文件夹下的jar文件导入java程序;
方法2:Maven程序中配置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工作表的相关知识,请在本站寻找。
本文标签: