1. 程式人生 > >jxl讀寫excel追加資料

jxl讀寫excel追加資料

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class WriteExcel {
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

	private static File hasFile;

	/**
	 * 同步操作,防止併發。
	 * 
	 * @param args
	 * @return
	 * @throws IOException
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	public synchronized static String[] write(String[] args)
			throws IOException, RowsExceededException, WriteException {

		// 檔案路徑
		// 判斷檔案是否存在,如果存在就不建立,追加,如果不存在則建立檔案並追加。
		WritableWorkbook book = Workbook.createWorkbook(getHasFile());
		book.setProtected(true);
		// -- 第一個引數是Sheet名,第二個引數是Sheet下標
		// -- 下標是整數,只起標識作用,建立的時候會以create順序建立,本例生成的EXCEL檔案第一個Sheet是sheet1
		WritableSheet sheet = book.createSheet("第一頁", 1);
		sheet.setColumnView(0, 20);
		sheet.setColumnView(1, 20);
		sheet.setColumnView(2, 5);
		sheet.setColumnView(3, 20);
		sheet.setColumnView(4, 20);
		sheet.setColumnView(5, 20);
		sheet.setColumnView(6, 20);
		sheet.setColumnView(7, 20);
		sheet.setColumnView(8, 20);
		sheet.getSettings().setProtected(true);
		sheet.getSettings().setPassword("xxxx");//設定密碼
		String[] title = { "支付寶交易號", "訂單號", "交易總金額", "商品名稱/訂單名稱", "商品描述/訂單備註",
				"買家支付寶賬號", "交易狀態", "sign", "交易時間" };
		for (int i = 0; i < title.length; i++) {
			Label lable = new Label(i, 0, title[i]);
			sheet.addCell(lable);
		}
		// 初次建立,寫入一行。
		for (int i = 0; i < title.length; i++) {
			Label lable = new Label(i, 1, args[i]);
			sheet.addCell(lable);
		}
		// 每次寫入資料時,寫到最後一行。
		book.write();
		book.close();
		System.out.println("寫入成功");
		return null;
	}

	/**
	 * 追加excel
	 * 
	 * @param args
	 * @throws IOException
	 * @throws BiffException
	 * @throws WriteException
	 * @throws RowsExceededException
	 */
	public static void addExcel(File file, String[] args) throws BiffException,
			IOException, RowsExceededException, WriteException {
		Workbook book = Workbook.getWorkbook(file);
		Sheet sheet = book.getSheet(0);
		// 獲取行
		int length = sheet.getRows();
		System.out.println(length);
		WritableWorkbook wbook = Workbook.createWorkbook(file, book); // 根據book建立一個操作物件
		WritableSheet sh = wbook.getSheet(0);// 得到一個工作物件
		// 從最後一行開始加
		for (int i = 0; i < args.length; i++) {
			Label label = new Label(i, length, args[i]);
			sh.addCell(label);
		}
		wbook.write();
		wbook.close();
	}

	/**
	 * 判斷檔案是否已經寫入
	 * 
	 * @param filename
	 * @return
	 */
	public static boolean filecheck(String filename) {
		boolean flag = false;
		File file = new File(filename);
		if (file.exists()) {
			flag = true;
		}
		setHasFile(file);
		return flag;
	}

	/**
	 * 不管神馬型別,都轉換成string
	 * 
	 * @param obj
	 * @return
	 */
	public static String converToString(Object obj) {
		return "";
	}

	public static void main(String[] args) throws RowsExceededException,
			WriteException, IOException, BiffException {
		String filepath = WriteExcel.class.getResource("/").getPath()
				+ sdf.format(new Date()) + ".xls";
		String[] str = { "20101020102032032", "2012203203232032032", "50",
				"100元朗識幣", "這個訂單沒有備註", "
[email protected]
", "STATU_SUCCESS", "ssdhfksdhfksdjhfkshdsdlfd", sdf.format(new Date()) }; boolean has = WriteExcel.filecheck(filepath); // 如果存在 if (has) addExcel(getHasFile(), str); else { write(str); } } /** * @return the hasFile */ public static File getHasFile() { return hasFile; } /** * @param hasFile * the hasFile to set */ public static void setHasFile(File hasFile) { WriteExcel.hasFile = hasFile; } }

執行第一次,在common/classes下建立了一個yyyyMMd.xls的檔案,寫入2行資料。

再次執行,此檔案資料追加一行。

可用來操作資料量不大的資料儲存。

方便下載檢視以及儲存。

缺點:追加資料的時候讀取原來的檔案作為副本然後新建一個工作物件,資料量大會導致記憶體溢位。

csv也不錯,可以研究一下,程式碼:

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

/**
 * Simple demo class which uses the api to present the contents
 * of an excel 97 spreadsheet as comma separated values, using a workbook
 * and output stream of your choice
 */
public class CSV
{
  /**
   * Constructor
   *
   * @param w The workbook to interrogate
   * @param out The output stream to which the CSV values are written
   * @param encoding The encoding used by the output stream.  Null or 
   * unrecognized values cause the encoding to default to UTF8
   * @param hide Suppresses hidden cells
   * @exception java.io.IOException
   */
  public CSV(Workbook w, OutputStream out, String encoding, boolean hide)
    throws IOException
  {
    if (encoding == null || !encoding.equals("UnicodeBig"))
    {
      encoding = "UTF8";
    }

    try
    {
      OutputStreamWriter osw = new OutputStreamWriter(out, encoding);
      BufferedWriter bw = new BufferedWriter(osw);
      
      for (int sheet = 0; sheet < w.getNumberOfSheets(); sheet++)
      {
        Sheet s = w.getSheet(sheet);

        if (!(hide && s.getSettings().isHidden()))
        {
          bw.write("*** " + s.getName() + " ****");
          bw.newLine();
          
          Cell[] row = null;
          
          for (int i = 0 ; i < s.getRows() ; i++)
          {
            row = s.getRow(i);
            
            if (row.length > 0)
            {
              if (!(hide && row[0].isHidden()))
              {
                bw.write(row[0].getContents());
                // Java 1.4 code to handle embedded commas
                // bw.write("\"" + row[0].getContents().replaceAll("\"","\"\"") + "\"");
              }
              
              for (int j = 1; j < row.length; j++)
              {
                bw.write(',');
                if (!(hide && row[j].isHidden()))
                {
                  bw.write(row[j].getContents());
                  // Java 1.4 code to handle embedded quotes
                  //  bw.write("\"" + row[j].getContents().replaceAll("\"","\"\"") + "\"");
                }
              }
            }
            bw.newLine();
          }
        }
      }
      bw.flush();
      bw.close();
    }
    catch (UnsupportedEncodingException e)
    {
      System.err.println(e.toString());
    }
  }
}

相關推薦

jxlexcel追加資料

import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import jxl.Sheet; import jxl.

JAVA使用jxlExcel

java操作Excel一般有兩種方式,jxl和poi,這裡只說明用前一種。 一、使用jxl-2.6.12.jar 寫: File xlsFile = new File("jxl.xls

jxl Excel例項

        本篇文章主要講的是jxl 操作Excel的三個簡單的例項,一個是讀取Excel表格資料,一個是 寫一個新的Excel表格,最後是更新現有的Excel表格。在開始全面學習 jxl 之前,我們先看幾個例子,讓大家大概整體的瞭解一下jxl 是怎麼操作Excel表的

python - excel資料

  # -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: do_excel.py @ide: PyCharm Community Edition @time: 2018-12-05 11:11 @blog:

用poiExcel並匯入資料

首先寫個工具類 用來讀寫Excel的 ... import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util

【原創】.NETExcel工具Spire.Xls使用(4)對資料操作與控制

  Spire.Office for .NET是E-iceblue開發的一種企業級.NET Office編輯的軟體集合,包括Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等等。.NET平臺的開發人員可以使用Spire.Office for .NET輕鬆的操作含有

python excel資料--基礎

1. 通過xlrd模組讀取資料 需要安裝xlrd(pip install xlrd)並import from xlrd import open_workbook as owb 首先需要指定excel檔案,如果excel檔案和python指令碼在同一目錄,使用相對路徑就可

QT:QOdbc excel資料

新建空QT專案。 在.pro檔案中新增: QT+=widgets QT+=sql 新增main.cpp。 加入如下程式碼: #include <QApplication> #include <QSqlDatabase> #in

EPPlus Excel 資料收集

1. EPPlus概述 EPPlus 是使用Open Office XML格式(xlsx)讀寫Excel 2007 / 2010檔案的.net開發庫。 EPPlus 支援: 單元格範圍單元格樣式(邊框,顏色,填充,字型,數字,對齊)圖表圖片形狀批註表格保護加密資

【python爬蟲】追加excel檔案中

爬取糗事百科熱門 安裝 讀寫excel 依賴 pip install xlwt 安裝 追加excel檔案內容 依賴 pip install xlutils 安裝 lxml import csv import requests fr

Jxl對已有的excel追加資料或修改資料

public class ExcelTest { /** * @param args * @throws IOException * @throws BiffException * @thro

使用phpexcel類excel文件

如何 blank 第三方類庫 第三方類 文件 pex ffi bsp 地址 使用原生php讀寫excel文件的博文地址: 基於使用原生php讀寫excel文件的不靠譜,本文將簡單介紹如何使用第三方類庫phpexcel來讀寫excel文件。 首先,需要到githut下載php

pythonexcel

字符串 一行 工作 default print file 設置 logs open python讀寫excel: # coding=utf-8 import xlrd import xlwt import traceback from xlutils.copy imp

Pythonexcel表格的方法

python excel 表格 xls 目的:實現用python做excel的讀取、新增、修改操作。環境:ubuntu 16.04 Python 3.5.2用python讀寫文檔,一般是操作txt文件或者可以用記事本打開的文件,因為這個操作很直接,不需要導入其他模塊,但如果想要對excel表

Pythonexcel表格的方法二

python excel 讀寫表格 目的:實現用python的另一種方法做excel的讀取、新增操作。環境:ubuntu 16.04 Python 3.5.2情景:之前介紹了一種操作excel文件的方法(私鏈),現在使用另一種方法讀寫excel文件,一次性讀出或寫入,讀寫也很方便,讀出為有序字典

JavaExcel之POI超入門(轉)

num mov war copy rbo workbook mon move dropdown   Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功

[Python3]Excel - openpyxl庫

註釋 出版 logs com lin author arc ltm 一行 什麽是openpyxl openpyxl是一個第三方的pythonexcel讀寫庫,支持Excel2010 xlsx/xlsm/xltx/xltm文件格式。 openpyxl提供哪些能力?

pythonExcel文件--使用xlrd模塊讀取,xlwt模塊寫入

xlrd get sta series 有趣 light log 分享 均值 一、安裝xlrd模塊和xlwt模塊 1. 下載xlrd模塊和xlwt模塊 到python官網http://pypi.python.org/pypi/xlrd下載模塊。下載的文件

nodeExcel操作

附錄 取數據 blog 代碼 width var uri body rda 目支持寫Excel的node.js模塊: node-xlsx: 基於Node.js解析excel文件數據及生成excel文件; excel-parser: 基於Node.js解析excel文件數據,

python excel

excel文件 result rep core read pattern 參數 .sh pri 最近老大讓從網站上獲取數據,手動太慢,網上找了點python,用腳本操作。 1 import os 2 import re 3 4 import xlrd 5 im