GVKun编程网logo

Apache-POI在Excel中对行进行排序(apache poi excel)

14

本篇文章给大家谈谈Apache-POI在Excel中对行进行排序,以及apachepoiexcel的知识点,同时本文还将给你拓展ApachePOI处理Excel、apachePOI在Excel工作簿中

本篇文章给大家谈谈Apache-POI在Excel中对行进行排序,以及apache poi excel的知识点,同时本文还将给你拓展Apache POI 处理 Excel、apache POI在Excel工作簿中添加水印、awk – 在没有标题和第一列的csv文件中对行进行排序、EXCEL-如何在excel中对图片进行批量排版等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Apache-POI在Excel中对行进行排序(apache poi excel)

Apache-POI在Excel中对行进行排序(apache poi excel)

我想按字符串列之一对工作表中的行进行排序。我试图使用Sheet.shiftRows方法实现这一点,但是我无法对此进行管理。它不会在我的方法中切换行的位置。我的代码有什么问题?还是有更好的方法可以按Excel中的任何“字符串”列对行进行排序?

/** * Sorts (A-Z) rows by String column * @param sheet - sheet to sort * @param column - String column to sort by * @param rowStart - sorting from this row down */private void sortSheet(Sheet sheet, int column, int rowStart) {    boolean sorting = true;    int lastRow = sheet.getLastRowNum();    while (sorting == true) {        sorting = false;        for (Row row : sheet) {            // skip if this row is before first to sort            if (row.getRowNum()<rowStart) continue;            // end if this is last row            if (lastRow==row.getRowNum()) break;            Row row2 = sheet.getRow(row.getRowNum()+1);            if (row2 == null) continue;            String firstValue = (row.getCell(column) != null) ? row.getCell(column).getStringCellValue() : "";            String secondValue = (row2.getCell(column) != null) ? row2.getCell(column).getStringCellValue() : "";            //compare cell from current row and next row - and switch if secondValue should be before first            if (secondValue.compareToIgnoreCase(firstValue)<0) {                                    sheet.shiftRows(row2.getRowNum(), row2.getRowNum(), -1);                sheet.shiftRows(row.getRowNum(), row.getRowNum(), 1);                sorting = true;            }        }    }}

任何想法如何管理工作表中的行排序?

更新 上面的方法自Apache-POI 3.9版本开始起作用。

编辑:添加了缺少的括号-helvio

答案1

小编典典

现在我现在为什么它不起作用。shiftRows方法中存在错误。当第三个参数(要移动的行数)为负数时,会引起麻烦。

此处描述:https :
//issues.apache.org/bugzilla/show_bug.cgi?id=53798

更新 此错误已从3.9版修复

Apache POI 处理 Excel

Apache POI 处理 Excel

连接数据库

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import java.io.IOException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class POIDemo {
    public POIDemo() {
        super();
    }

    public static void main(String[] args) throws Exception {
        test();
    }

    public static void test() throws FileNotFoundException, IOException, SQLException, ClassNotFoundException {
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "hr", "hr");
        st = conn.prepareStatement("select * from departments");
        rs = st.executeQuery();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("部门表");
        XSSFRow row = sheet.createRow(1);
        XSSFCell cell;
        cell = row.createCell(1);
        cell.setCellValue("部门编号");
        cell = row.createCell(2);
        cell.setCellValue("部门名称");
        cell = row.createCell(3);
        cell.setCellValue("经理");
        cell = row.createCell(4);
        cell.setCellValue("位置");
        int i = 2;
        while (rs.next()) {
            row = sheet.createRow(i);
            cell = row.createCell(1);
            cell.setCellValue(rs.getInt("department_id"));
            cell = row.createCell(2);
            cell.setCellValue(rs.getString("department_name"));
            cell = row.createCell(3);
            cell.setCellValue(rs.getInt("manager_id"));
            cell = row.createCell(4);
            cell.setCellValue(rs.getInt("location_id"));
            i++;
        }
        FileOutputStream out = new FileOutputStream(new File("E:\\demo3.xlsx"));
        workbook.write(out);
        out.close();
    }
}

apache POI在Excel工作簿中添加水印

apache POI在Excel工作簿中添加水印

我是Apache POI Java开发的新手,我正在尝试使用以下代码在Excel中添加水印。但是水印标识会覆盖其后面的内容。我想在背景中添加水印。

public class xlWatermark {
    public static void main(String[] args) {
        HSSFWorkbook wb = new HSSFWorkbook();
        FileOutputStream fileOut = null;
        try {
            fileOut = new FileOutputStream("Test.xls");
            HSSFSheet ws = wb.createSheet("testSheet");
            HSSFPatriarch dp = ws.createDrawingPatriarch();
            HSSFClientAnchor anchor = new HSSFClientAnchor
                (0,1023,255,(short) 2,4,(short) 13,26);
            HSSFTextbox txtbox = dp.createTextbox(anchor);
            HSSFRichTextString rtxt = new HSSFRichTextString("test");
            HSSFFont font = wb.createFont();
            font.setColor((short) 27);
            font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
            font.setFontHeightInPoints((short) 192);
            font.setFontName("Verdana");
            rtxt.applyFont(font);
            txtbox.setString(rtxt);
            txtbox.setLineStyle(HSSFShape.LINESTYLE_NONE);
            txtbox.setNoFill(true);
            wb.write(fileOut);
            fileOut.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }

您能帮我告诉我如何在excel中添加水印(在XSSF或HSSF工作簿中)或在exel标头中添加图片吗?

感谢Mudassir

awk – 在没有标题和第一列的csv文件中对行进行排序

awk – 在没有标题和第一列的csv文件中对行进行排序

我有一个包含如下记录的CSV文件.

id,h1,h2,h3,h4,h5,h6,h7 
   101,zebra,1,papa,4,dog,3,apple
   102,2,yahoo,5,kangaroo,7,ape

我想在没有标题和第一列的情况下将行排序到此文件中.我的输出应该是这样的.

id,h7
  101,apple,zebra
  102,ape,yahoo

我尝试了以下AWK,但不知道如何排除标题和第一列.

awk -F"," ' {
s=""
for(i=1; i<=NF; i++) { a[i]=$i; }
for(i=1; i<=NF; i++)
{
for(j = i+1; j<=NF; j++)
{
if (a[i] >= a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
for(i=1; i<=NF; i++){ s = s","a[i]; }
print s
} 
' file

谢谢

解决方法

如果perl没问题:

$perl -F,-lane 'print join ",",$.==1 ? @F : ($F[0],sort @F[1..$#F])' ip.txt
id,h7 
101,zebra
102,yahoo

> -F,表示作为字段分隔符,结果保存在@F数组中

>有关其他选项的详细信息,请参阅https://perldoc.perl.org/perlrun.html#Command-Switches

> join“,”使用,作为输出字段分隔符
> $.== 1? @F代表第一行,按原样打印
>($F [0],排序@F [1 .. $#F])其他行,获取其他字段的第一个字段和排序输出

> ..是范围运算符,$#F将给出最后一个字段的索引

对于给定的标题,排序第一行也会起作用,因此这可以简化所需的逻辑

$perl -F,$F[0],sort @F[1..$#F]' ip.txt
id,yahoo

$ruby -F,-lane 'print [$F[0],$F.drop(1).sort] * ","' ip.txt
id,yahoo

EXCEL-如何在excel中对图片进行批量排版

EXCEL-如何在excel中对图片进行批量排版

新建EXCEL->导入图片->如果每张图高度为33个单元格,共计10张图,那么将最后边的那张图(即正对着你的那一张)剪切粘贴到33*9行第一个单元格处->按F5定位“对象”确定->在“格式”>“排列”>“对齐”中,设置好左对齐和纵向对齐,就可以实现图片批量依次排好序。

 

参考:https://jingyan.baidu.com/article/22fe7ced49e3be7003617f7b.html    [如下]

  1. 批量插入图片以后,我们直接在格式中就可以批量修改图片尺寸

    如何在excel中对图片进行批量排版
    如何在excel中对图片进行批量排版
  2.  

    顺序排列图片。我们先把第一张图放到最后一个单元格

    如何在excel中对图片进行批量排版
    如何在excel中对图片进行批量排版
  3.  

    然后按F5键,打开定位窗口,然后点击“定位条件”

    如何在excel中对图片进行批量排版
    如何在excel中对图片进行批量排版
  4.  

    在定位条件里选择“对象”,然后点击确定

    如何在excel中对图片进行批量排版
  5.  

    然后在“格式”>“排列”>“对齐”中,设置好左对齐和纵向对齐

    如何在excel中对图片进行批量排版
  6.  

    这样图片就一次性排好了

    如何在excel中对图片进行批量排版
  7.  

    总结:

    1.批量插入图片以后,我们直接在格式中就可以批量修改图片尺寸

    2.顺序排列图片。我们先把第一张图放到最后一个单元格

    3.然后按F5键,打开定位窗口,然后点击“定位条件”

    4.在定位条件里选择“对象”,然后点击确定

    5.然后在“格式”>“排列”>“对齐”中,设置好左对齐和纵向对齐

    6.这样图片就一次性排好了

我们今天的关于Apache-POI在Excel中对行进行排序apache poi excel的分享已经告一段落,感谢您的关注,如果您想了解更多关于Apache POI 处理 Excel、apache POI在Excel工作簿中添加水印、awk – 在没有标题和第一列的csv文件中对行进行排序、EXCEL-如何在excel中对图片进行批量排版的相关信息,请在本站查询。

本文标签: