Android导出数据为excel


1.首先申请读写SD卡权限    

2.导入jxl.jar包     MainActivity

public class MainActivity extends Activity {
    Button btn;
    List<Order> orders = new ArrayList<Order>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //申请权限
        verifyStoragePermissions(this);

        Order order = new Order("0001", "金太郎", "17766778899", "北京市朝阳区");
        orders.add(order);

        btn = (Button) super.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try {
                    ExcelUtil.writeExcel(MainActivity.this,
                            orders, "volume_" + new Date().toString());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });
    }

    //申请读写权限
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"};

    public static void verifyStoragePermissions(Activity activity) {

        try {
            //检测是否有写的权限
            int permission = ActivityCompat.checkSelfPermission(activity,
                    "android.permission.WRITE_EXTERNAL_STORAGE");
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
工具类
public class ExcelUtil {
    //内存地址
    public static String root = Environment.getExternalStorageDirectory()
            .getPath();

    public static void writeExcel(Context context, List<Order> exportOrder,
                                  String fileName) throws Exception {
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && getAvailableStorage() > 1000000) {
            Toast.makeText(context, "SD卡不可用", Toast.LENGTH_LONG).show();
            return;
        }
        String[] title = {"订单", "店名", "电话", "地址"};
        File file;
        File dir = new File("/sdcard/Deye/");
        file = new File(dir, fileName + ".xls");
        if (!dir.exists()) {
            dir.mkdirs();
        }
        // 创建Excel工作表
        WritableWorkbook wwb;
        OutputStream os = new FileOutputStream(file);
        wwb = Workbook.createWorkbook(os);
        // 添加第一个工作表并设置第一个Sheet的名字
        WritableSheet sheet = wwb.createSheet("订单", 0);
        Label label;
        for (int i = 0; i < title.length; i++) {
            // Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
            // 在Label对象的子对象中指明单元格的位置和内容
            label = new Label(i, 0, title[i], getHeader());
            // 将定义好的单元格添加到工作表中
            sheet.addCell(label);
        }

        for (int i = 0; i < exportOrder.size(); i++) {
            Order order = exportOrder.get(i);

            Label orderNum = new Label(0, i + 1, order.id);
            Label restaurant = new Label(1, i + 1, order.restName);
            Label nameLabel = new Label(2, i + 1, order.restPhone);
            Label address = new Label(3, i + 1, order.receiverAddr);

            sheet.addCell(orderNum);
            sheet.addCell(restaurant);
            sheet.addCell(nameLabel);
            sheet.addCell(address);
            Toast.makeText(context, "写入成功", Toast.LENGTH_LONG).show();

        }
        // 写入数据
        wwb.write();
        // 关闭文件
        wwb.close();
    }

    public static WritableCellFormat getHeader() {
        WritableFont font = new WritableFont(WritableFont.TIMES, 10,
                WritableFont.BOLD);// 定义字体
        try {
            font.setColour(Colour.BLUE);// 蓝色字体
        } catch (WriteException e1) {
            e1.printStackTrace();
        }
        WritableCellFormat format = new WritableCellFormat(font);
        try {
            format.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中
            format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中
            // format.setBorder(Border.ALL, BorderLineStyle.THIN,
            // Colour.BLACK);// 黑色边框
            // format.setBackground(Colour.YELLOW);// 黄色背景
        } catch (WriteException e) {
            e.printStackTrace();
        }
        return format;
    }

    /**
     * 获取SD可用容量
     */
    private static long getAvailableStorage() {

        StatFs statFs = new StatFs(root);
        long blockSize = statFs.getBlockSize();
        long availableBlocks = statFs.getAvailableBlocks();
        long availableSize = blockSize * availableBlocks;
        // Formatter.formatFileSize(context, availableSize);
        return availableSize;
    }
}

Model类
public class Order implements Serializable {

    public String id;

    public String restPhone;

    public String restName;

    public String receiverAddr;


    public Order(String id, String restPhone, String restName, String receiverAddr) {
        this.id = id;
        this.restPhone = restPhone;
        this.restName = restName;

        this.receiverAddr = receiverAddr;
    }

    public Order(JSONObject obj) {
        this.id = obj.optString("order_number");
        this.restPhone = obj.optString("Rphone");
        this.restName = obj.optString("Rname");
        this.receiverAddr = obj.optString("receiver_address");
    }
}
导出按钮
<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="导出excel" />
<string name="action_settings">Settings</string>

转载自:https://github.com/reallin/Android_Excel

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp 是一款跨平台的前端开发框架,可用于开发 Web、iOS 和 Android 应用。而 easyexcel 是一款基于 Java 的开源 Excel 处理框架,可用于读写 Excel 文件。因此,如果你想在 Uniapp 中导出 Excel 文件,可以通过调用后端 Java 代码来实现。 具体实现步骤如下: 1. 在 Uniapp 中编写前端页面,包括需要导出数据和相应的导出按钮。 2. 在后端编写 Java 代码,使用 easyexcel 实现对数据的读写和导出。 3. 前端调用后端接口,将需要导出数据传递给后端。 4. 后端将数据写入 Excel 文件,并将文件返回给前端。 以下是一个简单的示例: 前端代码: ```html <template> <div> <button @click="exportExcel">导出 Excel</button> </div> </template> <script> export default { methods: { exportExcel() { // 调用后端接口导出 Excel this.$axios.get('/exportExcel').then((response) => { // 下载 Excel 文件 const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' }) const link = document.createElement('a') link.href = window.URL.createObjectURL(blob) link.download = 'data.xlsx' link.click() }) } } } </script> ``` 后端代码: ```java @RestController public class ExcelController { @GetMapping("/exportExcel") public ResponseEntity<byte[]> exportExcel() throws IOException { // 从数据库中获取需要导出数据 List<User> userList = userService.getUserList(); // 写入 Excel 文件 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ExcelWriter excelWriter = EasyExcel.write(outputStream, User.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build(); excelWriter.write(userList, writeSheet); excelWriter.finish(); // 返回 Excel 文件 HttpHeaders headers = new HttpHeaders(); headers.setContentDispositionFormData("attachment", "data.xlsx"); return new ResponseEntity<>(outputStream.toByteArray(), headers, HttpStatus.OK); } } ``` 这是一个简单的示例,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值