本篇文章给大家谈谈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工作簿中添加水印
- awk – 在没有标题和第一列的csv文件中对行进行排序
- EXCEL-如何在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
连接数据库
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 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文件中对行进行排序
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 -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->导入图片->如果每张图高度为33个单元格,共计10张图,那么将最后边的那张图(即正对着你的那一张)剪切粘贴到33*9行第一个单元格处->按F5定位“对象”确定->在“格式”>“排列”>“对齐”中,设置好左对齐和纵向对齐,就可以实现图片批量依次排好序。
参考:https://jingyan.baidu.com/article/22fe7ced49e3be7003617f7b.html [如下]
-
批量插入图片以后,我们直接在格式中就可以批量修改图片尺寸
-
顺序排列图片。我们先把第一张图放到最后一个单元格
-
然后按F5键,打开定位窗口,然后点击“定位条件”
-
在定位条件里选择“对象”,然后点击确定
-
然后在“格式”>“排列”>“对齐”中,设置好左对齐和纵向对齐
-
这样图片就一次性排好了
-
总结:
1.批量插入图片以后,我们直接在格式中就可以批量修改图片尺寸
2.顺序排列图片。我们先把第一张图放到最后一个单元格
3.然后按F5键,打开定位窗口,然后点击“定位条件”
4.在定位条件里选择“对象”,然后点击确定
5.然后在“格式”>“排列”>“对齐”中,设置好左对齐和纵向对齐
6.这样图片就一次性排好了
我们今天的关于Apache-POI在Excel中对行进行排序和apache poi excel的分享已经告一段落,感谢您的关注,如果您想了解更多关于Apache POI 处理 Excel、apache POI在Excel工作簿中添加水印、awk – 在没有标题和第一列的csv文件中对行进行排序、EXCEL-如何在excel中对图片进行批量排版的相关信息,请在本站查询。
本文标签: