■ Cause
Dans divers sites de développement, il est courant que la cellule A1 de la feuille soit utilisée lors de la première ouverture du fichier Excel lors de la création d'un artefact. Cela prend du temps pour le faire manuellement, et je pense que plus il y a de fichiers, plus il y aura d'omissions dans la cellule A1. Je pense qu'il serait pratique de placer tous les fichiers dans le dossier spécifié ou la cellule A1 de chaque feuille du fichier spécifié en utilisant le POI d'Apache, j'ai donc créé un programme simple. (Peut être défini sur n'importe quelle cellule en modifiant A1CELL_ROW et A1CELL_COL)
■ Environnement OS:Windows Version JRE: 1.8 Version POI: 4.1.2
■ Code source package xxx.xxxxx.xxxx; // Changer à votre guise
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory;
public class A1CellJump {
//エクセルファイルを置いているフォルダー private static String INPUT_DIR = ".\"; private final int A1CELL_ROW = 0; private final int A1CELL_COL = 0; private final String EXCEL = ".xlsx";
public static void main(String[] args) throws IOException {
A1CellJump tt = new A1CellJump();
if (args.length > 0) {
INPUT_DIR = args[0];
}
List<String> fileList = tt.getFileList(INPUT_DIR);
for (int i = 0; i < fileList.size(); i++) {
tt.jumpA1Cell(fileList.get(i));
}
}
/**
Déplacer vers la cellule A1.
@param fileName Nom du fichier (chemin complet) */ private void jumpA1Cell (String fileName) { System.out.println ("fichier de configuration:" + fileName); // Spécifiez le fichier Excel à modifier FileInputStream in = null;
Workbook wb = null;
try {
in = new FileInputStream(fileName);
// Utiliser WorkbookFactory lors de la modification d'un fichier Excel existant wb = WorkbookFactory.create(in);
} catch (Exception e) {
e.printStackTrace();
}
// Récupère tous les noms de feuille.
List
// Déplacer vers la cellule A1 pour chaque feuille for (int i = 0; i < list.size(); i++) { String sheetName = list.get(i); System.out.print ("\ t feuille:" + nomFeuille);
// Active la cellule A1 de la feuille spécifiée. activeA1Cell(wb.getSheet(sheetName)); }
FileOutputStream out = null;
try {
// Spécifiez le fichier Excel à modifier out = new FileOutputStream(fileName);
// écrire wb.write(out); } catch (Exception e) { e.printStackTrace(); } finally { try {out.close();} catch (Exception e) {} try {wb.close();} catch (Exception e) {}
}
}
/**
Obtenez tous les noms de feuille.
@return Tous les noms de feuille
*/
private List
return IntStream.range(0, wkBook.getNumberOfSheets())
.mapToObj(wkBook::getSheetAt)
.map(Sheet::getSheetName)
.collect(Collectors.toList());
}
/**
Activez la cellule A1 de la feuille spécifiée.
Feuille de feuille @param */ private void activeA1Cell(Sheet sheet) { Row row = sheet.getRow(A1CELL_ROW); Cell cell = null; if (row != null) { cell = row.getCell(A1CELL_COL); if (cell == null) { cell = row.createCell(A1CELL_COL); } } else { row = sheet.createRow(A1CELL_ROW); cell = row.createCell(A1CELL_COL); }
cell.setAsActiveCell();
System.out.println(" OK");
}
/**
Obtenez tous les noms de fichiers Excel qui existent dans le chemin spécifié.
(Si le chemin spécifié est un fichier Excel, le nom du fichier Excel est renvoyé)
@param dir Chemin du fichier Excel à obtenir
Liste des noms de fichiers Excel @return
*/
private List
if (dir.endsWith(EXCEL)) {
fileList.add(dir);
System.out.println(dir);
return fileList;
}
try {
Files.walkFileTree(p1, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException
{
String fileName = file.toString();
if (fileName.endsWith(EXCEL)) {
fileList.add(file.toString());
System.out.println(file.toString());
}
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
return fileList;
}
} ■ Résultats Cas 1: il y a une valeur dans la cellule A1 (Sheet1 dans BBB.xlsx) Cas 2: aucune valeur dans la cellule A1 (feuille2 dans BBB.xlsx) Cas 3: la cellule A1 est une cellule fusionnée, aucune valeur (Sheet3 dans BBB.xlsx) Cas 4: la cellule A1 est une cellule fusionnée et a une valeur (Sheet4 dans BBB.xlsx)
-------- Message de sortie à la console ----------------- ....\AAA.xlsx ....\BBB.xlsx Fichier de configuration: .... \ AAA.xlsx Feuille: Sheet1 OK Fichier de configuration: .... \ BBB.xlsx Feuille: Sheet1 OK Feuille: Sheet2 OK Feuille: Sheet3 OK Feuille: Sheet4 OK