Java 复制Excel工作表

Tina_Tang

在日常操作Excel文档时,经常会遇到需要复制工作表的情况,以此来节省时间,提高工作效率。根据复制需求不同,一般我们可将其分为以下两类:

1、 复制工作表(保留原有工作表格式)

  • 在同一个文档内复制工作表
  • 在不同文档间复制工作表

2、 复制单元格

  • 复制指定单元格数据(保留原有单元格格式)
  • 复制带有公式的单元格时只保留公式值

同时,对于复制方法copy(),以下是包含了对数据复制的不同应用方法的表格,可供参考:

方法释义
copyFrom(Worksheet worksheet)复制自源工作表的数据
copy(CellRange sourceRange, CellRange destRange)复制源数据到目标数据范围
copy(CellRange sourceRange, CellRange destRange, Boolean copyStyle)复制源数据到目标数据范围时,是否复制源数据样式
copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn)复制源数据到目标工作表中的指定行和列
copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn, Boolean copyStyle)复制源数据到目标工作表中的指定行和列时,是否复制源数据样式
copy(CellRange sourceRange, CellRange destRange, Boolean copyStyle, Boolean updateReference, Boolean ignoreSize)复制源数据到目标数据范围时,是否复制源数据样式,是否更新引用,是否忽略大小
copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn, boolean copyStyle, boolean undateReference)复制源数据到目标工作表中的指定行和列时,是否复制源数据样式,是否更新引用
copy(CellRange sourceRange, CellRange destRange, boolean copyStyle, boolean updateReference, boolean ignoreSize, boolean copyShape)复制源数据到目标数据范围时,是否复制源数据样式,是否更新引用,是否忽略大小,是否复制形状

环境搭建:

方式1:通过官网下载Jar包。解压文档后将lib文件夹下的Spire.Xls.jar导入IDEA中。具体操作步骤参见下图。
image

方式2:通过maven安装产品及导入相关依赖。详细步骤可参考此教程

代码示例

1、复制工作表

  • 在同一文档内复制工作表
import com.spire.xls.*;
public class CopyWorksheet1 {
    public static void main(String[] args) {
        //加载文档
        Workbook wb = new Workbook();
   wb.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        //获取第一张工作表
        Worksheet sheet0 = wb.getWorksheets().get(0);
        //获取第二张工作表,命名,并将第一张工作表内容复制到该工作表
        Worksheet sheet2 = wb.getWorksheets().get(1);
        sheet2.setName("Copiedsheet");
        sheet2.copyFrom(sheet0);
        //保存文档
    wb.saveToFile("output/Copy1.xlsx",FileFormat.Version2013);
    }
}

复制效果:

image

  • 在不同文档间复制
import com.spire.xls.*;
public class CopyWorksheet2 {
    public static void main(String[] args) {
        //加载文档1,并获取第一张幻灯片
        Workbook wb1 = new Workbook();
     wb1.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        Worksheet sheet1 = wb1.getWorksheets().get(0);
        //加载文档2,获取第二张幻灯片,并将文档1中的工作表内容复制到该工作表
        Workbook wb2 = new Workbook();
    wb2.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample2.xlsx");
        Worksheet sheet2 = wb2.getWorksheets().get(1);
        sheet2.setName("Copied");
        sheet2.copyFrom(sheet1);
        //保存文档
   wb2.saveToFile("output/Copy2.xlsx",FileFormat.Version2013);
    }
}

复制效果:

image

2、复制单元格

  • 直接复制单元格数据范围
import com.spire.xls.*;
public class CopyCells1 {
    public static void main(String[] args) {
        //加载文档
        Workbook wb = new Workbook();
     wb.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        //获取第一个工作表
        Worksheet sheet = wb.getWorksheets().get(0);
        //复制指定单元格范围中的数据
        CellRange range1 = sheet.getCellRange(11,1,17,3);
        CellRange range2 = sheet.getCellRange(20,1,26,3);
        sheet.copy(range1,range2,true);
        //保存文档
 wb.saveToFile("output/CopyCells1.xlsx",FileFormat.Version2013);
    }
}

复制效果:

image

  • 复制带公式的单元格时只保留公式值
import com.spire.xls.*;
import java.util.EnumSet;

public class copycell {
    public static void main(String[] args) {
        //加载Excel工作簿
        Workbook wb = new Workbook();
     wb.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.xlsx");
        //获取工作表
        Worksheet sheet = wb.getWorksheets().get(0);
        //设置复制单元格选项为仅复制公式值
        CopyRangeOptions copyOptions = CopyRangeOptions.OnlyCopyFormulaValue;
        //复制指定单元格到目标单元格
        sheet.copy(sheet.getCellRange("F3:F18"), sheet.getCellRange("K3:K18"), EnumSet.of(copyOptions));
        //保存文档
wb.saveToFile("output/CopyCellsValue.xlsx",FileFormat.Version2013);
        wb.dispose();
    }
}

复制效果:

image

(本文完)

阅读 1.5k
284 声望
6 粉丝
0 条评论
284 声望
6 粉丝
文章目录
宣传栏