Android导出Excel
来源:互联网 发布:淘宝更换类目 编辑:程序博客网 时间:2024/05/30 05:17
最近需要做一个将手机中保存的JSON文件转换成容易阅读的Excel文件,故做了一个小demo,现将该demo用到的一些部件记录一下。
1.文件浏览器
为了方便找到所需的JSON文件,故现做了一个简易的文件浏览器。
1.1文件列表
文件列表采用的是Android的空间ListView进行展示的,下面简要对ListView做一个简单的概述。
ListView的创建需要三个元素:
(1)ListView中的每一列的View。
(2)填入View的数据或者图片等。
(3)连接数据与ListView的适配器(Adapter)。
常用的ListView适配器有:ArrayAdapter<T>、SimpleAdatper、SimpleCursorAdapter、BaseAdapter。ArrayAdapter最为简单,ListView每一行只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。BaseAdapter是自定义适配器,使用它必须自定义类继承它,它可以实现更加多样的效果。
下面对ListView的使用做一个简单的描述:
(1)ListView资源视图的定义
<ListView android:id="@+id/file_path_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:headerDividersEnabled="true" android:footerDividersEnabled="true" android:fastScrollEnabled="true"/>(2)ListView在Activity中创建
private ListView mListView = null;protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView)findViewById(R.id.file_path_list);}(3)各种Adapter的使用
(3.1)ArrayAdatper<T>使用
ArrayAdapter使用的资源视图 R.layout.simple_text.xml的定义
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="5dip" android:paddingBottom="5dip" android:orientation="horizontal" android:gravity="center_vertical"><TextViewandroid:id="@+id/file_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:singleLine="true"android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>ArrayAdapter的使用
List<String> data = new ArrayList<String>();data.add("数据1");data.add("数据2");mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_item,getData()));</span>(3.2)SimpleAdapter、SimpleCursorAdapter使用
SimpleAdatper、SimpleCursorAdapter的使用步骤与ArrayAdapter是一样的,也是需要先定义好需要展示的View的xml,然后创建该Adapter的时候讲该xml的资源ID带人,同时填入数据,下面简单列一下SimpleCursorAdapter读取通讯录用于View展示的代码。
//读取通讯录Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);startManagingCursor(cursor);ListAdapter listAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1, cursor,new String[]{People.NAME}, new int[]{android.R.id.text1}); mListView.setAdapter(listAdapter);(3.3)BaseAdapter的使用
本次做的读取手机内存卡的文件浏览器采用的就是该适配器,现将代码贴在此:
文件列表每一项样式定义的xml文件:file_browser_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="5dip" android:paddingBottom="5dip" android:orientation="horizontal" android:gravity="center_vertical"> <FrameLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:gravity="center"> <ImageView android:id="@+id/file_image_frame" android:layout_width="65px" android:layout_height="65px" android:scaleType="centerInside" android:gravity="center" android:background="@drawable/image_icon_bg" android:layout_gravity="center" android:visibility="gone" /> <ImageView android:id="@+id/file_image" android:layout_width="59px" android:layout_height="59px" android:scaleType="centerInside" android:gravity="center" android:layout_gravity="center" /> </FrameLayout> <LinearLayout android:id="@+id/file_info_layout" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:orientation="vertical" android:paddingLeft="5dip"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/file_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/file_count" android:layout_width="wrap_content" android:layout_marginLeft="5dip" android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/modified_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:gravity="left" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/file_size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:layout_marginLeft="14px" android:gravity="left" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout> </LinearLayout> <FrameLayout android:id="@+id/file_checkbox_area" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:gravity="center" android:paddingLeft="10dip"> <ImageView android:id="@+id/file_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitCenter" android:gravity="center" android:layout_gravity="center" /> </FrameLayout></LinearLayout>继承自BaseAdapter的类定义:
package com.szx.exportexcel;import java.io.File;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import com.szx.util.Constant;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.os.Build;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class FileListAdapter extends BaseAdapter {private Context mcontext = null;private List<File> mfiles = null;public FileListAdapter(Context context,List<File> files){mcontext = context;mfiles = files;}@Overridepublic int getCount() {int count = 0;if(mfiles!=null){count = mfiles.size();}return count;}@Overridepublic Object getItem(int position) {if((position >= 0) && (position < this.getCount()))return mfiles.get(position);return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ListHolder mListHolder = null;if(convertView==null){convertView=LayoutInflater.from(mcontext).inflate(R.layout.file_browser_item, parent,false);mListHolder = new ListHolder();mListHolder.mfileIcon = (ImageView)convertView.findViewById(R.id.file_image);mListHolder.mfileName = (TextView)convertView.findViewById(R.id.file_name);mListHolder.mfileSize = (TextView)convertView.findViewById(R.id.file_size);mListHolder.mfileTime = (TextView)convertView.findViewById(R.id.modified_time);convertView.setTag(mListHolder);}else{mListHolder = (ListHolder)convertView.getTag();}File f = (File)this.getItem(position);if(f!=null){String fileIcon = Constant.getFileIcon(f);if(fileIcon == null){Drawable drawable = this.getApkIcon(f.getAbsolutePath());if(drawable!=null){mListHolder.mfileIcon.setImageDrawable(drawable);}else{mListHolder.mfileIcon.setImageResource(R.drawable.file_icon_default);}}else{Resources res = mcontext.getResources();int icon = res.getIdentifier(fileIcon, "drawable", mcontext.getPackageName());if(icon<=0){icon = R.drawable.file_icon_default;}mListHolder.mfileIcon.setImageResource(icon);}if(f.isFile()){mListHolder.mfileName.setText(f.getName());mListHolder.mfileSize.setText(this.getFileSize(f.length()));}else{File[] files = f.listFiles();mListHolder.mfileSize.setText("");if(files!=null){mListHolder.mfileName.setText(f.getName()+"("+files.length+")");}else{mListHolder.mfileName.setText(f.getName());}}mListHolder.mfileTime.setText(this.getFileTime(f.lastModified()));}return convertView;}public String getFileTime(long filetime) {SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); String ftime = formatter.format(new Date(filetime)); return ftime;}public Drawable getApkIcon(String path){ PackageManager pm = mcontext.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES); if(info != null){ ApplicationInfo appInfo = info.applicationInfo;if(Build.VERSION.SDK_INT >= 8){appInfo.sourceDir = path;appInfo.publicSourceDir = path;}return appInfo.loadIcon(pm);} return null;}public String getFileSize(long filesize) {DecimalFormat df = new DecimalFormat("#.00");StringBuffer mstrbuf = new StringBuffer();if (filesize < 1024) {mstrbuf.append(filesize);mstrbuf.append(" B");} else if (filesize < 1048576) {mstrbuf.append(df.format((double)filesize / 1024));mstrbuf.append(" K");} else if (filesize < 1073741824) {mstrbuf.append(df.format((double)filesize / 1048576));mstrbuf.append(" M");} else {mstrbuf.append(df.format((double)filesize / 1073741824));mstrbuf.append(" G");}df = null;return mstrbuf.toString();}static class ListHolder{ImageView mfileIcon;TextView mfileName;TextView mfileSize;TextView mfileTime;}}自定义FileListAdapter的使用:
mFileListAdapter = new FileListAdapter(this,mFileList);mListView.setAdapter(mFileListAdapter);mFileListAdapter.notifyDataSetChanged();继承自BaseAdapter的类必须实现如下几个函数:
@Overridepublic int getCount() {// TODO Auto-generated method stubreturn 0;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubreturn null;}其中getCount返回Adapter中有几条数据,getItem返回列表中位置为position的那一项,getView实现了整个列表中每一条样式的展现。
本demo的文件列表展示效果如下:
1.2ListView长按菜单的实现
ListView中长按菜单的实现由两种方式,一种是实现setOnItemLongClickListener事件,另外一种是通过上下文菜单实现。
(1)使用setOnItemLongClickListener实现
使用该方式实现需要自己实现弹出框的代码,本demo中采用上下文菜单方式实现。
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View v,int pos, long id) {return false;}});(2)通过上下文菜单实现
(2.1)在OnCreate函数中给ListView注册上下文
registerForContextMenu(mListView);(2.2)Activity实现onCreateContextMenu、onContextItemSelected两个方法
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.context_filemenu, menu);AdapterView.AdapterContextMenuInfo info = null;try {info = (AdapterView.AdapterContextMenuInfo) menuInfo;} catch (ClassCastException e) {return;}File mselectedFile = (File)mFileListAdapter.getItem(info.position);if(mselectedFile != null){menu.setHeaderTitle(mselectedFile.getName());}}
public boolean onContextItemSelected(MenuItem item) {AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();File f = (File)mFileListAdapter.getItem(info.position);if(f == null)return false;switch(item.getItemId()){case R.id.exportExcel:return true;default:return super.onContextItemSelected(item);} }
1.3SD卡路径文件的获取
(1)SD卡路径的获取
File f = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED); //判断sd卡是否存在 if (sdCardExist) { f = Environment.getExternalStorageDirectory();//获取sd卡目录 if (f != null) {mSDCardPath = f.getAbsolutePath();}f = Environment.getRootDirectory();//获取根目录 if (f != null) {mRootPath = f.getAbsolutePath();} }(2)SD卡文件的获取及展示
File file = null;if(mCurrentPathFile!=null){if(mCurrentPathFile.isDirectory()){file = mCurrentPathFile;}else{file = mCurrentPathFile.getParentFile();}}else{file = new File(mSDCardPath);}if(file!=null){if(file.exists()&&file.canRead()){if(file.isFile()){}else{mFileList.clear();mFileListAdapter.notifyDataSetChanged();mCurrentPathFile = file;mCurrentPathView.setText(mCurrentPathFile.getAbsolutePath());File[] files = file.listFiles();Arrays.sort(files,new FileComparator());for(File f:files){mFileList.add(f);mFileListAdapter.notifyDataSetChanged();}}}}
2.JSON字符串转换成HashMap
JSON解析的库有三种:Android自带的JSON解析库,net.sf.json库,gson库。其中Android自带的JSON库使用起来不方便,net.sf.json库使用的Jar包与Android的包冲突,故Android中普遍使用gson来进行JSON的解析。
下面是从网上摘录的使用gson转换JSON串为Map的工具类
package com.szx.util;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import com.google.gson.JsonArray;import com.google.gson.JsonElement;import com.google.gson.JsonObject;import com.google.gson.JsonParser;/** * 使用Gson把json字符串转成Map */public class JSONUtil {/** * 获取JsonObject * @param json * @return */public static JsonObject parseJson(String json){JsonParser parser = new JsonParser(); JsonObject jsonObj = parser.parse(json).getAsJsonObject();return jsonObj;}/** * 根据json字符串返回Map对象 * @param json * @return */public static Map<String,Object> toMap(String json){return JSONUtil.toMap(JSONUtil.parseJson(json));}/** * 将JSONObjec对象转换成Map-List集合 * @param json * @return */public static Map<String, Object> toMap(JsonObject json){ Map<String, Object> map = new HashMap<String, Object>(); Set<Entry<String, JsonElement>> entrySet = json.entrySet(); for (Iterator<Entry<String, JsonElement>> iter = entrySet.iterator(); iter.hasNext(); ){ Entry<String, JsonElement> entry = iter.next(); String key = entry.getKey(); Object value = entry.getValue(); if(value instanceof JsonArray) map.put((String) key, toList((JsonArray) value)); else if(value instanceof JsonObject) map.put((String) key, toMap((JsonObject) value)); else map.put((String) key, value); } return map;}/** * 将JSONArray对象转换成List集合 * @param json * @return */public static List<Object> toList(JsonArray json){ List<Object> list = new ArrayList<Object>(); for (int i=0; i<json.size(); i++){ Object value = json.get(i); if(value instanceof JsonArray){ list.add(toList((JsonArray) value)); } else if(value instanceof JsonObject){ list.add(toMap((JsonObject) value)); } else{ list.add(value); } } return list;}}
虽然net.sf.json与Android冲突,但是使用它转JSON串的工具类在其他地方用处也很大,故也记录与此。
net.sf.json使用的jar文件如图:
工具类如下:
package com.szx.util;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import net.sf.json.JSONArray;import net.sf.json.JSONException;import net.sf.json.JSONObject;import android.content.Context;public class JSONUtil {public static String getRaw(Context context, int RawId) {try {InputStream is = context.getResources().openRawResource(RawId);BufferedReader reader = new BufferedReader(new InputStreamReader(is));// StringBuffer线程安全;StringBuilder线程不安全StringBuffer sb = new StringBuffer();for (String str = null; (str = reader.readLine()) != null;) {sb.append(str);}return sb.toString();} catch (IOException e) {e.printStackTrace();}return null;}public static String getAsset(Context context, String fileName) {try {InputStream is = context.getResources().getAssets().open(fileName);// StringBuffer线程安全;StringBuilder线程不安全BufferedReader reader = new BufferedReader(new InputStreamReader(is));StringBuffer sb = new StringBuffer();for (String str = null; (str = reader.readLine()) != null;) {sb.append(str);}return sb.toString();} catch (IOException e) {e.printStackTrace();}return null;}public static void JsonObject2HashMap(JSONObject jo, List<Map<?, ?>> rstList) {for (Iterator<String> keys = jo.keys(); keys.hasNext();) {try {String key1 = keys.next();System.out.println("key1---" + key1 + "------" + jo.get(key1)+ (jo.get(key1) instanceof JSONObject) + jo.get(key1)+ (jo.get(key1) instanceof JSONArray));if (jo.get(key1) instanceof JSONObject) {JsonObject2HashMap((JSONObject) jo.get(key1), rstList);continue;}if (jo.get(key1) instanceof JSONArray) {JsonArray2HashMap((JSONArray) jo.get(key1), rstList);continue;}System.out.println("key1:" + key1 + "----------jo.get(key1):"+ jo.get(key1));json2HashMap(key1, jo.get(key1), rstList);} catch (Exception e) {e.printStackTrace();}}}public static void JsonArray2HashMap(JSONArray joArr,List<Map<?, ?>> rstList) {for (int i = 0; i < joArr.size(); i++) {try {if (joArr.get(i) instanceof JSONObject) {JsonObject2HashMap((JSONObject) joArr.get(i), rstList);continue;}if (joArr.get(i) instanceof JSONArray) {JsonArray2HashMap((JSONArray) joArr.get(i), rstList);continue;}System.out.println("Excepton~~~~~");} catch (Exception e) {e.printStackTrace();}}}public static void json2HashMap(String key, Object value,List<Map<?, ?>> rstList) {HashMap<String, Object> map = new HashMap<String, Object>();map.put(key, value);rstList.add(map);}/** * @param jsonData * @param rstList * @param params * @func hashmap追加字段 */public static void JsonToHashMap(JSONObject jsonData, Map<String, Object> rstList,String... params) {try {for (Iterator<String> keyStr = jsonData.keys(); keyStr.hasNext();) {String key1 = keyStr.next().trim();if (jsonData.get(key1) instanceof JSONObject) {HashMap<String, Object> mapObj = new HashMap<String, Object>();JsonToHashMap((JSONObject) jsonData.get(key1), mapObj, params);rstList.put(key1, mapObj);continue;}if (jsonData.get(key1) instanceof JSONArray) {ArrayList<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();JsonToHashMap((JSONArray) jsonData.get(key1), arrayList, params);rstList.put(key1, arrayList);continue;}JsonToHashMap(key1, jsonData.get(key1), rstList);}// 追加字段if (params != null && params.length == 2) {rstList.put(params[0], params[1]);}if (params != null && params.length == 4) {rstList.put(params[0], params[1]);rstList.put(params[2], params[3]);}} catch (Exception e) {e.printStackTrace();}}public static void JsonToHashMap(JSONArray jsonarray, List<Map<String, Object>> rstList,String... params) {try {for (int i = 0; i < jsonarray.size(); i++) {if (jsonarray.get(i) instanceof JSONObject) {HashMap<String, Object> mapObj = new HashMap<String, Object>();JsonToHashMap((JSONObject) jsonarray.get(i), mapObj, params);rstList.add(mapObj);continue;}}} catch (Exception e) {e.printStackTrace();}}public static void JsonToHashMap(String key, Object value, Map<String, Object> rstList) {key = replaceBlank(key);if (value instanceof String) {rstList.put(key, replaceBlank((String) value));return;}rstList.put(key, value);}public static String replaceBlank(String str) {String dest = "";if (str != null) {Pattern p = Pattern.compile("\\s*|t|r|n");Matcher m = p.matcher(str);dest = m.replaceAll("");}return dest;}}
3.导出Excel
Android中导出excel使用的类库是jxl,下面是使用jxl.jar实现的导出excel的类
package com.szx.util;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.Map;import android.content.Context;import android.util.Log;import android.widget.Toast;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.WorkbookSettings;import jxl.write.Label;import jxl.write.WritableCell;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;public class ExcelUtils {public static WritableFont arial14font = null;public static WritableCellFormat arial14format = null;public static WritableFont arial10font = null;public static WritableCellFormat arial10format = null;public static WritableFont arial12font = null;public static WritableCellFormat arial12format = null;public final static String UTF8_ENCODING = "UTF-8";public final static String GBK_ENCODING = "GBK";public static void format() {try {arial14font = new WritableFont(WritableFont.ARIAL, 14,WritableFont.BOLD);arial14font.setColour(jxl.format.Colour.LIGHT_BLUE);arial14format = new WritableCellFormat(arial14font);arial14format.setAlignment(jxl.format.Alignment.CENTRE);arial14format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);arial14format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);arial14format.setBackground(jxl.format.Colour.VERY_LIGHT_YELLOW);arial10font = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD);arial10format = new WritableCellFormat(arial10font);arial10format.setAlignment(jxl.format.Alignment.CENTRE);arial10format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);arial10format.setBackground(jxl.format.Colour.LIGHT_BLUE);arial12font = new WritableFont(WritableFont.ARIAL, 12);arial12format = new WritableCellFormat(arial12font);arial12format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);} catch (WriteException e) {e.printStackTrace();}}public static void createSmtrautExcel(String fileName,String sheetName,String[] lineName,String[] colName,List<List<Map<String,Object>>>values){format();WritableWorkbook workbook = null;try {File file = new File(fileName);if (!file.exists()) {file.createNewFile();}boolean isWrite = file.canWrite();workbook = Workbook.createWorkbook(file);WritableSheet sheet = workbook.createSheet(sheetName, 0);int ran = 1;for(int j=0;j<values.size();j++){sheet.setRowView(j*6+ran-1, 600);for (int line = 0; line < lineName.length; line++) {sheet.addCell(new Label(line+1, j*6+ran, lineName[line], arial10format));}for (int col = 0; col < colName.length; col++) {sheet.addCell(new Label(0, col+j*6+ran+1, colName[col], arial10format));}for(int i=0;i<values.get(j).size();i++){Map<String,Object> m = values.get(j).get(i);int col = (Integer) m.get("col");int line = (Integer)m.get("line");String value = (String)m.get("value");if(col==0&&line==0){sheet.addCell(new Label(col,line+j*6+ran-1, value, arial14format));sheet.addCell(new Label(col,line+j*6+ran, "", arial10format));sheet.mergeCells(col, line+j*6+ran-1, col+lineName.length, line+j*6+ran-1);}else{sheet.addCell(new Label(col,line+j*6+ran, value, arial10format));}}ran++;}workbook.write();} catch (Exception e) {e.printStackTrace();} finally {if (workbook != null) {try {workbook.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
使用jxl进行导出excel导出文件,简单说几点:
(1)创建excel:WritableWorkbook workbook = Workbook.createWorkbook(file);
(2)创建sheet:WritableSheet sheet = workbook.createSheet(sheetName, 0);
(3)写入单元格数据:sheet.addCell(new Label(col,line+j*6+ran, value, arial10format));其中Label中第一个参数是列,第二个参数是行,第三个参数是写入单元格中的值,第四个参数是单元格的样式
(4)设置行高:sheet.setRowView(j*6+ran-1, 600);其中第一个参数是行号,第二个参数是行高
(5)合并单元格:sheet.mergeCells(col, line+j*6+ran-1, col+lineName.length, line+j*6+ran-1);其中第一个参数是合并单元格左上角的列号,第二个参数是左上角的行号,第三个参数是右下角的列号,第四个参数是右下角的行号。
上述即是该demo中使用的技术点,该demo可从该处下载。
该demo实现了如下JSON串:
{"acc_ffz":1.6,"acc_fz":0.8,"acc_yxz":0.6,"bulk_mathValue":-1.0,"dis_ffz":10.8,"dis_fz":5.4,"dis_yxz":3.8,"en_ffz":1.4,"en_fz":0.7,"en_yxz":0.5,"sample_time":"2016-09-09T03:15:25.313+0000","signalType":-1,"tmp":41.2,"vel_ffz":1.1,"vel_fz":0.6,"vel_yxz":0.4}转换成该改格式的excel表:
- Android导出Excel
- Android导出数据到Excel
- Android实现导出数据库到Excel表格
- Android SQLite数据库导出Excel表
- 导出EXCEL
- Excel导出
- 导出Excel
- 导出EXCEL
- 导出Excel
- EXCEL导出
- 导出Excel
- 导出excel
- 导出excel
- EXCEL导出
- 导出excel
- 导出Excel
- Excel导出。
- 导出excel
- 2016.10.20回顾
- C++中实现WebService以及调用WebService
- NotificationManager的新用法和Handler()用法以及android 学习小收获
- Longest Common Prefix
- C# XML解析
- Android导出Excel
- 资源链接_来自慕课网
- Virtualbox主机和虚拟机之间文件夹共享及双向拷贝(Windows<->Windows, Windows<->Linux)
- PHP的面相对象性和异常处理函数
- 好记性不如烂笔头,记我在用友ERP重装IIS服务碰到的一些问题和心得。
- 每个架构师都应该研究下康威定律
- Unicode编码表
- android app 第一次启动白屏或者黑屏
- Eclipse中web项目部署至Tomcat步骤