- 浏览: 119643 次
- 性别:
- 来自: 武汉
最新评论
-
985996546:
...
[转载][Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式 -
fategaga:
drawable = Drawable.createFromS ...
[转载][Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式 -
lannerK:
楼主,不用写这种方法判断啊,FileHeader 有个方法是判 ...
Java中解压文件名有中文的rar包出现乱码问题的解决 -
大象06:
<div class="quote_title ...
Java中解压文件名有中文的rar包出现乱码问题的解决 -
Kevin_fan:
太感谢了,帮我解决乱码问题。 关键在于楼主查API。 你是怎么 ...
Java中解压文件名有中文的rar包出现乱码问题的解决
最近和csv文件杠上了,今天将xlsx和xls文件转成csv文件,然后再对转换后的csv文件执行一些操作,但是我调用Apache的官方例子的时候,转换是成功了,执行操作的时候一直报错,文件被占用的错误。
主要的转换代码我都下载了,调用其实很简单:
XLSX2CSV xlsx2csv = new XLSX2CSV(filePath, toFile); xlsx2csv.process();
我想肯定是process方法里面没有释放掉内存,但是这个类是Apache的官方例子,应该不会有错的啊。
结果我到XLSX2CSV这个类里面找,果然没有close方法,于是乎,我就写了个close方法:
public void close(){ this.output.close(); }
然后把这个close方法加到process方法的结尾就OK了。
public void process() throws IOException, OpenXML4JException, ParserConfigurationException, SAXException { ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable( this.xlsxPackage); XSSFReader xssfReader = new XSSFReader(this.xlsxPackage); StylesTable styles = xssfReader.getStylesTable(); XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader .getSheetsData(); int index = 0; while (iter.hasNext()) { InputStream stream = iter.next(); String sheetName = iter.getSheetName(); this.output.println(); this.output.println(sheetName + " [index=" + index + "]:"); processSheet(styles, strings, stream); stream.close(); ++index; } close(); }
这样就解决了csv文件在程序结束前一直被占用的问题。
下面和大家共享下apache的官方代码,还是不错的。
XLSX转CSV:
/* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ package com.cnas.fileConversion; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.ss.usermodel.BuiltinFormats; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable; import org.apache.poi.xssf.eventusermodel.XSSFReader; import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; /** * A rudimentary XLSX -> CSV processor modeled on the POI sample program * XLS2CSVmra by Nick Burch from the package * org.apache.poi.hssf.eventusermodel.examples. Unlike the HSSF version, this * one completely ignores missing rows. * <p/> * Data sheets are read using a SAX parser to keep the memory footprint * relatively small, so this should be able to read enormous workbooks. The * styles table and the shared-string table must be kept in memory. The standard * POI styles table class is used, but a custom (read-only) class is used for * the shared string table because the standard POI SharedStringsTable grows * very quickly with the number of unique strings. * <p/> * Thanks to Eric Smith for a patch that fixes a problem triggered by cells with * multiple "t" elements, which is how Excel represents different formats (e.g., * one word plain and one word bold). * * @author hkf41625 */ public class XLSX2CSV { /** * The type of the data value is indicated by an attribute on the cell. The * value is usually in a "v" element within the cell. */ enum xssfDataType { BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER, } /** * Derived from http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api * <p/> * Also see Standard ECMA-376, 1st edition, part 4, pages 1928ff, at * http://www.ecma-international.org/publications/standards/Ecma-376.htm * <p/> * A web-friendly version is http://openiso.org/Ecma/376/Part4 */ class MyXSSFSheetHandler extends DefaultHandler { /** * Table with styles */ private StylesTable stylesTable; /** * Table with unique strings */ private ReadOnlySharedStringsTable sharedStringsTable; /** * Destination for data */ private final PrintStream output; /** * Number of columns to read starting with leftmost */ private final int minColumnCount; // Set when V start element is seen private boolean vIsOpen; // Set when cell start element is seen; // used when cell close element is seen. private xssfDataType nextDataType; // Used to format numeric cell values. private short formatIndex; private String formatString; private final DataFormatter formatter; private int thisColumn = -1; // The last column printed to the output stream private int lastColumnNumber = -1; // Gathers characters as they are seen. private StringBuffer value; /** * Accepts objects needed while parsing. * * @param styles * Table of styles * @param strings * Table of shared strings * @param cols * Minimum number of columns to show * @param target * Sink for output */ public MyXSSFSheetHandler(StylesTable styles, ReadOnlySharedStringsTable strings, int cols, PrintStream target) { this.stylesTable = styles; this.sharedStringsTable = strings; this.minColumnCount = cols; this.output = target; this.value = new StringBuffer(); this.nextDataType = xssfDataType.NUMBER; this.formatter = new DataFormatter(); } /* * (non-Javadoc) * * @see * org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, * java.lang.String, java.lang.String, org.xml.sax.Attributes) */ public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { if ("inlineStr".equals(name) || "v".equals(name)) { vIsOpen = true; // Clear contents cache value.setLength(0); } // c => cell else if ("c".equals(name)) { // Get the cell reference String r = attributes.getValue("r"); int firstDigit = -1; for (int c = 0; c < r.length(); ++c) { if (Character.isDigit(r.charAt(c))) { firstDigit = c; break; } } thisColumn = nameToColumn(r.substring(0, firstDigit)); // Set up defaults. this.nextDataType = xssfDataType.NUMBER; this.formatIndex = -1; this.formatString = null; String cellType = attributes.getValue("t"); String cellStyleStr = attributes.getValue("s"); if ("b".equals(cellType)) nextDataType = xssfDataType.BOOL; else if ("e".equals(cellType)) nextDataType = xssfDataType.ERROR; else if ("inlineStr".equals(cellType)) nextDataType = xssfDataType.INLINESTR; else if ("s".equals(cellType)) nextDataType = xssfDataType.SSTINDEX; else if ("str".equals(cellType)) nextDataType = xssfDataType.FORMULA; else if (cellStyleStr != null) { // It's a number, but almost certainly one // with a special style or format int styleIndex = Integer.parseInt(cellStyleStr); XSSFCellStyle style = stylesTable.getStyleAt(styleIndex); this.formatIndex = style.getDataFormat(); this.formatString = style.getDataFormatString(); if (this.formatString == null) this.formatString = BuiltinFormats .getBuiltinFormat(this.formatIndex); } } } /* * (non-Javadoc) * * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, * java.lang.String, java.lang.String) */ public void endElement(String uri, String localName, String name) throws SAXException { String thisStr = null; // v => contents of a cell if ("v".equals(name)) { // Process the value contents as required. // Do now, as characters() may be called more than once switch (nextDataType) { case BOOL: char first = value.charAt(0); thisStr = first == '0' ? "FALSE" : "TRUE"; break; case ERROR: thisStr = "\"ERROR:" + value.toString() + '"'; break; case FORMULA: // A formula could result in a string value, // so always add double-quote characters. thisStr = '"' + value.toString() + '"'; break; case INLINESTR: // TODO: have seen an example of this, so it's untested. XSSFRichTextString rtsi = new XSSFRichTextString(value .toString()); thisStr = '"' + rtsi.toString() + '"'; break; case SSTINDEX: String sstIndex = value.toString(); try { int idx = Integer.parseInt(sstIndex); XSSFRichTextString rtss = new XSSFRichTextString( sharedStringsTable.getEntryAt(idx)); thisStr = '"' + rtss.toString() + '"'; } catch (NumberFormatException ex) { output.println("Failed to parse SST index '" + sstIndex + "': " + ex.toString()); } break; case NUMBER: String n = value.toString(); if (this.formatString != null) thisStr = formatter.formatRawCellContents(Double .parseDouble(n), this.formatIndex, this.formatString); else thisStr = n; break; default: thisStr = "(TODO: Unexpected type: " + nextDataType + ")"; break; } // Output after we've seen the string contents // Emit commas for any fields that were missing on this row if (lastColumnNumber == -1) { lastColumnNumber = 0; } for (int i = lastColumnNumber; i < thisColumn; ++i) output.print(','); // Might be the empty string. output.print(thisStr); // Update column if (thisColumn > -1) lastColumnNumber = thisColumn; } else if ("row".equals(name)) { // Print out any missing commas if needed if (minColumns > 0) { // Columns are 0 based if (lastColumnNumber == -1) { lastColumnNumber = 0; } for (int i = lastColumnNumber; i < (this.minColumnCount); i++) { output.print(','); } } // We're onto a new row output.println(); lastColumnNumber = -1; } } /** * Captures characters only if a suitable element is open. Originally * was just "v"; extended for inlineStr also. */ public void characters(char[] ch, int start, int length) throws SAXException { if (vIsOpen) value.append(ch, start, length); } /** * Converts an Excel column name like "C" to a zero-based index. * * @param name * @return Index corresponding to the specified name */ private int nameToColumn(String name) { int column = -1; for (int i = 0; i < name.length(); ++i) { int c = name.charAt(i); column = (column + 1) * 26 + c - 'A'; } return column; } } // ///////////////////////////////////// private OPCPackage xlsxPackage; private int minColumns; private PrintStream output; private final String OUTPUT_CHARSET = "GBK"; /** * Creates a new XLSX -> CSV converter * * @param pkg * The XLSX package to process * @param output * The PrintStream to output the CSV to * @param minColumns * The minimum number of columns to output, or -1 for no minimum */ public XLSX2CSV(OPCPackage pkg, PrintStream output, int minColumns) { this.xlsxPackage = pkg; this.output = output; this.minColumns = minColumns; } //TODO catch exceptions public XLSX2CSV(String inputFilePath, String outputFilePath) throws Exception { xlsxPackage = OPCPackage.open(inputFilePath, PackageAccess.READ); output = new PrintStream(outputFilePath, OUTPUT_CHARSET); minColumns = -1; } /** * Parses and shows the content of one sheet using the specified styles and * shared-strings tables. * * @param styles * @param strings * @param sheetInputStream */ public void processSheet(StylesTable styles, ReadOnlySharedStringsTable strings, InputStream sheetInputStream) throws IOException, ParserConfigurationException, SAXException { InputSource sheetSource = new InputSource(sheetInputStream); SAXParserFactory saxFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxFactory.newSAXParser(); XMLReader sheetParser = saxParser.getXMLReader(); ContentHandler handler = new MyXSSFSheetHandler(styles, strings, this.minColumns, this.output); sheetParser.setContentHandler(handler); sheetParser.parse(sheetSource); } /** * Initiates the processing of the XLS workbook file to CSV. * * @throws IOException * @throws OpenXML4JException * @throws ParserConfigurationException * @throws SAXException */ public void process() throws IOException, OpenXML4JException, ParserConfigurationException, SAXException { ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable( this.xlsxPackage); XSSFReader xssfReader = new XSSFReader(this.xlsxPackage); StylesTable styles = xssfReader.getStylesTable(); XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader .getSheetsData(); int index = 0; while (iter.hasNext()) { InputStream stream = iter.next(); String sheetName = iter.getSheetName(); this.output.println(); this.output.println(sheetName + " [index=" + index + "]:"); processSheet(styles, strings, stream); stream.close(); ++index; } close(); } public void close(){ this.output.close(); } public static void main(String[] args) throws Exception { XLSX2CSV xlsx2csv = new XLSX2CSV("c:\\test.xlsx", "c:\\outs.csv"); xlsx2csv.process(); } }
XLS转CSV:
/* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ package com.cnas.fileConversion; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener; import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; import org.apache.poi.hssf.eventusermodel.HSSFListener; import org.apache.poi.hssf.eventusermodel.HSSFRequest; import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener; import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener; import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord; import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.record.BOFRecord; import org.apache.poi.hssf.record.BlankRecord; import org.apache.poi.hssf.record.BoolErrRecord; import org.apache.poi.hssf.record.BoundSheetRecord; import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.LabelRecord; import org.apache.poi.hssf.record.LabelSSTRecord; import org.apache.poi.hssf.record.NoteRecord; import org.apache.poi.hssf.record.NumberRecord; import org.apache.poi.hssf.record.RKRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.SSTRecord; import org.apache.poi.hssf.record.StringRecord; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * A XLS -> CSV processor, that uses the MissingRecordAware EventModel code to * ensure it outputs all columns and rows. * * @author hkf41625 */ public class XLS2CSV implements HSSFListener { private int minColumns; private POIFSFileSystem fs; private PrintStream output; private int lastRowNumber; private int lastColumnNumber; /** Should we output the formula, or the value it has? */ private boolean outputFormulaValues = true; /** For parsing Formulas */ private SheetRecordCollectingListener workbookBuildingListener; private HSSFWorkbook stubWorkbook; // Records we pick up as we process private SSTRecord sstRecord; private FormatTrackingHSSFListener formatListener; /** So we known which sheet we're on */ private int sheetIndex = -1; private BoundSheetRecord[] orderedBSRs; private ArrayList boundSheetRecords = new ArrayList(); // For handling formulas with string results private int nextRow; private int nextColumn; private boolean outputNextStringRecord; private final String OUTPUT_CHARSET = "GBK"; /** * Creates a new XLS -> CSV converter * * @param fs * The POIFSFileSystem to process * @param output * The PrintStream to output the CSV to * @param minColumns * The minimum number of columns to output, or -1 for no minimum */ public XLS2CSV(POIFSFileSystem fs, PrintStream output, int minColumns) { this.fs = fs; this.output = output; this.minColumns = minColumns; } public XLS2CSV(String inputFilePath, String outputFilePath) throws Exception { fs = new POIFSFileSystem(new FileInputStream(inputFilePath)); output = new PrintStream(outputFilePath, OUTPUT_CHARSET); minColumns = -1; } /** * Creates a new XLS -> CSV converter * * @param filename * The file to process * @param minColumns * The minimum number of columns to output, or -1 for no minimum * @throws IOException * @throws FileNotFoundException */ public XLS2CSV(String filename, int minColumns) throws IOException, FileNotFoundException { this(new POIFSFileSystem(new FileInputStream(filename)), System.out, minColumns); } /** * Initiates the processing of the XLS file to CSV */ public void process() throws IOException { MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener( this); formatListener = new FormatTrackingHSSFListener(listener); HSSFEventFactory factory = new HSSFEventFactory(); HSSFRequest request = new HSSFRequest(); if (outputFormulaValues) { request.addListenerForAllRecords(formatListener); } else { workbookBuildingListener = new SheetRecordCollectingListener( formatListener); request.addListenerForAllRecords(workbookBuildingListener); } factory.processWorkbookEvents(request, fs); close(); } /** * Main HSSFListener method, processes events, and outputs the CSV as the * file is processed. */ public void processRecord(Record record) { int thisRow = -1; int thisColumn = -1; String thisStr = null; switch (record.getSid()) { case BoundSheetRecord.sid: boundSheetRecords.add(record); break; case BOFRecord.sid: BOFRecord br = (BOFRecord) record; if (br.getType() == BOFRecord.TYPE_WORKSHEET) { // Create sub workbook if required if (workbookBuildingListener != null && stubWorkbook == null) { stubWorkbook = workbookBuildingListener .getStubHSSFWorkbook(); } // Output the worksheet name // Works by ordering the BSRs by the location of // their BOFRecords, and then knowing that we // process BOFRecords in byte offset order sheetIndex++; if (orderedBSRs == null) { orderedBSRs = BoundSheetRecord .orderByBofPosition(boundSheetRecords); } output.println(); output.println(orderedBSRs[sheetIndex].getSheetname() + " [" + (sheetIndex + 1) + "]:"); } break; case SSTRecord.sid: sstRecord = (SSTRecord) record; break; case BlankRecord.sid: BlankRecord brec = (BlankRecord) record; thisRow = brec.getRow(); thisColumn = brec.getColumn(); thisStr = ""; break; case BoolErrRecord.sid: BoolErrRecord berec = (BoolErrRecord) record; thisRow = berec.getRow(); thisColumn = berec.getColumn(); thisStr = ""; break; case FormulaRecord.sid: FormulaRecord frec = (FormulaRecord) record; thisRow = frec.getRow(); thisColumn = frec.getColumn(); if (outputFormulaValues) { if (Double.isNaN(frec.getValue())) { // Formula result is a string // This is stored in the next record outputNextStringRecord = true; nextRow = frec.getRow(); nextColumn = frec.getColumn(); } else { thisStr = formatListener.formatNumberDateCell(frec); } } else { thisStr = '"' + HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"'; } break; case StringRecord.sid: if (outputNextStringRecord) { // String for formula StringRecord srec = (StringRecord) record; thisStr = srec.getString(); thisRow = nextRow; thisColumn = nextColumn; outputNextStringRecord = false; } break; case LabelRecord.sid: LabelRecord lrec = (LabelRecord) record; thisRow = lrec.getRow(); thisColumn = lrec.getColumn(); thisStr = '"' + lrec.getValue() + '"'; break; case LabelSSTRecord.sid: LabelSSTRecord lsrec = (LabelSSTRecord) record; thisRow = lsrec.getRow(); thisColumn = lsrec.getColumn(); if (sstRecord == null) { thisStr = '"' + "(No SST Record, can't identify string)" + '"'; } else { thisStr = '"' + sstRecord.getString(lsrec.getSSTIndex()) .toString() + '"'; } break; case NoteRecord.sid: NoteRecord nrec = (NoteRecord) record; thisRow = nrec.getRow(); thisColumn = nrec.getColumn(); // TODO: Find object to match nrec.getShapeId() thisStr = '"' + "(TODO)" + '"'; break; case NumberRecord.sid: NumberRecord numrec = (NumberRecord) record; thisRow = numrec.getRow(); thisColumn = numrec.getColumn(); // Format thisStr = formatListener.formatNumberDateCell(numrec); break; case RKRecord.sid: RKRecord rkrec = (RKRecord) record; thisRow = rkrec.getRow(); thisColumn = rkrec.getColumn(); thisStr = '"' + "(TODO)" + '"'; break; default: break; } // Handle new row if (thisRow != -1 && thisRow != lastRowNumber) { lastColumnNumber = -1; } // Handle missing column if (record instanceof MissingCellDummyRecord) { MissingCellDummyRecord mc = (MissingCellDummyRecord) record; thisRow = mc.getRow(); thisColumn = mc.getColumn(); thisStr = ""; } // If we got something to print out, do so if (thisStr != null) { if (thisColumn > 0) { output.print(','); } output.print(thisStr); } // Update column and row count if (thisRow > -1) lastRowNumber = thisRow; if (thisColumn > -1) lastColumnNumber = thisColumn; // Handle end of row if (record instanceof LastCellOfRowDummyRecord) { // Print out any missing commas if needed if (minColumns > 0) { // Columns are 0 based if (lastColumnNumber == -1) { lastColumnNumber = 0; } for (int i = lastColumnNumber; i < (minColumns); i++) { output.print(','); } } // We're onto a new row lastColumnNumber = -1; // End the row output.println(); } } public void close(){ this.output.close(); } public static void main(String[] args) throws Exception { XLS2CSV xls2csv = new XLS2CSV("C:\\Time.xls","c:\\out.csv"); xls2csv.process(); } }
评论
1 楼
大象06
2011-07-29
后记:原来还忘记释放了源文件,如果是xlsx转换成csv,那么在程序结束前xlsx也一直被占用着,不能操作。所以还要释放掉,将close方法修改如下:
public void close() { try { this.xlsxPackage.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.output.close(); }
发表评论
-
Android中对布局的翻转,如何保持布局不颠倒
2013-10-19 18:05 2554最近在研究iphone上的翻转效果,就是类似于passboo ... -
[转载][Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
2013-05-06 17:01 6369Handler+Runnable模式 我们先看一个并不是异 ... -
如何将spring与hibernate配置在java应用程序
2011-12-15 15:46 0众所周知,spring和hibernate一般都是用在网站开发 ... -
Java关于截取字符串的实现
2011-10-06 22:31 1115遇到这样一个问题,假设我们输入一串字符,不保证这一串字符里 ... -
SQL SERVER快速删除数据库表里面的记录,truncate与delete的对比
2011-08-27 10:57 2323用BulkInsert向数据库里面的一个表里插入40W条数据, ... -
Java启动多线程,同时启动几个没有关系的任务
2011-08-27 10:45 6680最近在和线程打交道,要同时启动多个线程,并且每个线程要做不同的 ... -
BufferedReader和PrintWriter读写中文的问题
2011-08-19 09:31 6601最近用BufferedReader读一个文本文件,然后再将读出 ... -
JDBC实现记录的更新或者删除
2011-08-09 12:07 2885众所周知,hibernate里面 ... -
Java中解压文件名有中文的rar包出现乱码问题的解决
2011-07-27 21:42 7459之前一直在用java-unrar-0.3.jar来解压rar文 ... -
JDBC里面如何运用事务实现执行多条SQL语句
2011-06-28 16:03 7925数据库是SQL SERVER 2005 编译环境是Eclip ... -
关于ResultSet只得到第一条记录的实现
2011-06-15 12:45 18017今天用jdbc读取数据库,用的是ResultSet,每次读出 ... -
java读取csv文件中指定的行的值
2011-06-13 12:48 10255最近做项目需要根据csv文件的表头创建数据库表,所以就要读取文 ...
相关推荐
至于CSV到XLS(X)的转换,需要先解析CSV文件,然后创建对应的Workbook、Sheet、Row和Cell,最后保存为Excel文件。XLSX和XLS之间的转换主要涉及不同内部结构的处理,XLSX使用XML存储数据,而XLS则使用二进制格式。 这...
在IT行业中,文件上传是常见的应用场景,特别是在Web开发中,用户可能需要上传各种类型的文件,如Excel或CSV,以便系统进行处理。Java作为后端开发的主流语言,提供了丰富的库来处理这些任务。本篇文章将深入讲解...
在Java编程环境中,Apache POI库是一个非常实用的工具,它允许我们操作Microsoft Office格式的文件,特别是Excel(.xls和.xlsx)文件。在JMeter测试框架中,我们可以结合使用POI库和BeanShell组件来读取和写入Excel...
3. `invoice_20210412153259.pdf`: 同样,这可能是一个发票样本,可能用于展示Spire.Xls将Excel转换为PDF的能力,或者展示如何在Java中处理包含复杂格式和数据的Excel文件。 4. `代码示例.txt`: 这很可能是Spire.Xls...
2. **转换原因**:转换Excel文件格式可能是因为需要与使用不同软件的人员共享数据,比如从`.xlsx`转换为`.csv`以便于在数据库中使用,或者将文件转换为较旧的`.xls`格式,以便老版本的Excel能打开。 3. **转换工具...
3. **文档解析**:OFFICE文档转换需要对各种文档格式有深入理解,例如,Word的DOC/DOCX格式,Excel的XLS/XLSX格式,以及PDF等。这通常涉及到解析XML或二进制文件结构,以便提取和构建文档内容。 4. **库和API调用**...
- **创建工作簿**: 使用`XSSFWorkbook`类创建一个新的.xlsx文件,或者用`HSSFWorkbook`类创建一个.xls文件。 - **创建工作表**: 在工作簿中,你可以创建多个工作表,通过`createSheet()`方法指定工作表名称。 - *...
导出数据通常涉及到读取现有Excel文件并将其内容转换为其他格式,如CSV或数据库记录。Apache POI提供了方便的方法来遍历工作表、行和单元格,获取其中的数据。 ```java Workbook workbook = WorkbookFactory.create...
通常我们会选择将Excel文件转换为CSV格式,然后使用内置的`BufferedReader`进行读取,或者使用第三方库如SimpleExcel。 - CSV方式: 首先,将Excel文件转换为CSV,然后使用以下代码读取: ```java ...
DataFrame可以通过多种方式创建,例如从数据库查询结果、CSV文件或者直接创建: ```python import pandas as pd # 假设已有数据 data = {'Name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 20]} df =...
这个类可能定义了通用的方法,如打开Excel文件、读取工作表、遍历单元格等,为不同版本的Excel文件(如xls、xlsx)提供了统一的接口。具体实现可能会使用Apache POI库,这是一个流行的Java API,专用于处理Microsoft...
- 创建`Workbook`对象:使用`POI`库,通过`WorkbookFactory`类的静态方法`create()`,传入文件输入流或者文件路径,可以创建一个表示Excel文件的工作簿对象。 - 访问工作表:`Workbook`对象中包含多个`Sheet`对象...
可以使用`Workbook.createWorkbook()`方法,传入一个OutputStream对象,这样最终的Excel文件会被写入到这个流中。 - **创建Worksheet**:然后,我们在Workbook中创建Worksheet,这相当于Excel中的工作表。使用`...
导出数据通常意味着将Excel中的信息转换为其他格式,如CSV、JSON或直接导入数据库,这涉及到了数据转换和文件操作的知识。 标签“EXCLE”可能是“Excel”的拼写错误,因此我们可以推测这个话题与Microsoft Excel的...
以下是一个简单的例子,展示了如何使用Apache POI读取和写入Excel文件: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; public class ...
- jxl库可能不支持Excel的最新格式(xlsx),主要支持老版本的xls格式。对于更现代的Excel文件操作,可能需要使用其他库,如Apache POI。 6. **其他替代方案**: - Apache POI:虽然体积较大,但功能更全面,支持...
在JavaScript(简称JS)环境中,读取Excel数据内容通常涉及到使用一些特定的库或插件,因为原生的JS并不支持直接操作二进制文件如Excel(.xlsx或.xls)格式。在给定的场景中,提到的是一个名为"jqueryExcel"的插件,...
这种做法通常利用了像是Python的pandas库、Java的Apache POI,或者是Node.js的xlsx库等,它们可以创建、读取和修改Excel文件,而不需要实际运行Excel。 在“标签”中,“excel”显然是指Microsoft Excel,一种广泛...
1. **Apache POI库**:Apache POI是一个广泛使用的开源库,它允许Java开发者创建、修改和显示Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在读取Excel文件时,主要涉及两个关键组件——HSSF(处理.xls...
在C++编程中,处理Excel文件通常涉及到使用第三方库来实现读写功能,因为标准库并不直接支持这种操作。常见的库有libxl、TinyXML、pugixml、OpenCV中的cv::imwrite等,但最常用且功能强大的是Apache POI和...