Excel COM接口

在Windows平台上,还可以通过 Excel 应用的 COM 接口 来对Excel进行操作。

这个方法相当于使用Python程序 通过 Excel应用 自己去修改,当然没有任何的副作用

而且能够实现一些特殊的功能,比如 自动打印Excel、合并单元格 等。

COM接口的特点是:打开文件快,读写速度慢。

使用 Excel COM 接口 打开 超大 Excel文件 比上面的两个库 要快很多。因为Excel程序本身的优化,可以部分加载,而上面的两个库是全部先读入内存。

如果你只是从 大Excel文件中 读取或修改少量数据,Excel COM 接口会快很多。

但是,如果你要读取大Excel中的大量数据,不要使用 COM接口,会非常的慢。

使用 Excel COM 接口,首先需要安装pywin32库,在命令行窗口输入如下命令:

pip install pywin32

比如可以这样修改

import win32com.client
excel = win32com.client.Dispatch("Excel.Application")

# excel.Visible = True     # 可以让excel 可见

# 这里填写要修改的Excel文件的绝对路径
workbook = excel.Workbooks.Open(r"d:\tmp\income1.xlsx")

# 得到 2017 表单
sheet = workbook.Sheets('2017')

# 修改表单第一行第一列单元格内容
# com接口,单元格行号、列号从1开始
sheet.Cells(1,1).Value="你好"

# 保存内容
workbook.Save()

# 关闭该Excel文件
workbook.Close()

# excel进程退出
excel.Quit()

# 释放相关资源
sheet = None
book = None
excel.Quit()
excel = None

运行一下可以发现Excel内容也能修改。

关于使用com接口操作Excel具体细节, 可以点击这里,参考微软官方文档

COM 接口、xlrd库 打开数据文件 和 读取数据的性能对比,大家可以参考下面这段代码。

import time

def byCom():
    t1 = time.time()
    import win32com.client
    excel = win32com.client.Dispatch("Excel.Application")

    # excel.Visible = True     # 可以让excel 可见
    workbook = excel.Workbooks.Open(r"h:\tmp\ruijia\数据.xlsx")

    sheet = workbook.Sheets(2)

    print(sheet.Cells(2,15).Value)
    print(sheet.UsedRange.Rows.Count)  #多少行

    t2 = time.time()
    print(f'打开: 耗时{t2 - t1}秒')

    total = 0
    for row in range(2,sheet.UsedRange.Rows.Count+1):
        value = sheet.Cells(row,15).Value
        if type(value) not in [int,float]:
            continue
        total += value

    print(total)

    t3 = time.time()
    print(f'读取数据: 耗时{t3 - t2}秒')


def byXlrd():
    t1 = time.time()
    import xlrd

    # 加载 excel 文件
    srcBook = xlrd.open_workbook("数据.xlsx")
    sheet = srcBook.sheet_by_index(1)

    print(sheet.cell_value(rowx=1,colx=14))
    print(sheet.nrows) #多少行

    t2 = time.time()
    print(f'打开: 耗时{t2 - t1}秒')

    total = 0
    for row in range(1,sheet.nrows):
        value = sheet.cell_value(row, 14)
        if type(value) == str:
            continue
        total += value

    print(total)

    t3 = time.time()
    print(f'读取数据: 耗时{t3 - t2}秒')

byCom()
byXlrd()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中导出Excel文件,可以使用一些开源的库,如Apache POI或EasyExcel。下面分别介绍这两种库的使用方法: 1. 使用Apache POI导出Excel: 首先,在pom.xml文件中添加Apache POI的依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> ``` 然后,编写导出Excel的代码: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class ExcelExporter { public static void exportDataToExcel() { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Column 1"); headerRow.createCell(1).setCellValue("Column 2"); // ... // 填充数据 Row dataRow = sheet.createRow(1); dataRow.createCell(0).setCellValue("Data 1"); dataRow.createCell(1).setCellValue("Data 2"); // ... try (FileOutputStream outputStream = new FileOutputStream("data.xlsx")) { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { exportDataToExcel(); } } ``` 上述代码创建了一个XSSFWorkbook对象,然后在Sheet中创建表头和数据行,并将数据导出到名为"data.xlsx"的Excel文件中。 2. 使用EasyExcel导出Excel: 首先,在pom.xml文件中添加EasyExcel的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.3.0</version> </dependency> ``` 然后,编写导出Excel的代码: ```java import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; public class ExcelExporter { public static void exportDataToExcel() { List<Data> dataList = new ArrayList<>(); dataList.add(new Data("Data 1", "Data 2")); // ... String fileName = "data.xlsx"; EasyExcel.write(fileName, Data.class).sheet("Sheet1").doWrite(dataList); } public static void main(String[] args) { exportDataToExcel(); } public static class Data { private String column1; private String column2; // 构造方法、getter和setter省略 public Data(String column1, String column2) { this.column1 = column1; this.column2 = column2; } } } ``` 上述代码使用EasyExcel库提供的方法将数据写入名为"data.xlsx"的Excel文件中。需要注意的是,要导出的数据类需要定义为静态内部类。 这就是使用Apache POI和EasyExcel导出Excel文件的基本步骤。根据实际需求,你可以调整代码来满足特定的导出需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值