■ Ursache
In verschiedenen Entwicklungsstandorten wird häufig die A1-Zelle des Arbeitsblatts verwendet, wenn die Excel-Datei beim Erstellen eines Artefakts zum ersten Mal geöffnet wird. Es braucht Zeit, um es manuell zu machen, und ich denke, je mehr Dateien es gibt, desto mehr Auslassungen werden in Zelle A1 vorgenommen. Ich denke, es wäre praktisch, alle Dateien unter dem angegebenen Ordner oder der angegebenen Zelle A1 jedes Blattes der angegebenen Datei mithilfe des POI von Apache festzulegen, also habe ich ein einfaches Programm erstellt. (Kann durch Ändern von A1CELL_ROW und A1CELL_COL auf eine beliebige Zelle gesetzt werden.)
■ Umgebung OS:Windows JRE-Version: 1.8 POI-Version: 4.1.2
■ Quellcode Paket xxx.xxxxx.xxxx; // Ändern Sie nach Ihren Wünschen
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));
}
}
/**
Gehen Sie zu Zelle A1.
@param Dateiname Dateiname (vollständiger Pfad) */ private void jumpA1Cell (String fileName) { System.out.println ("Konfigurationsdatei:" + Dateiname); // Geben Sie die zu ändernde Excel-Datei an FileInputStream in = null;
Workbook wb = null;
try {
in = new FileInputStream(fileName);
// Verwenden Sie WorkbookFactory, wenn Sie eine vorhandene Excel-Datei bearbeiten wb = WorkbookFactory.create(in);
} catch (Exception e) {
e.printStackTrace();
}
// Alle Blattnamen abrufen.
List
// Gehe für jedes Blatt zu Zelle A1 for (int i = 0; i < list.size(); i++) { String sheetName = list.get(i); System.out.print ("\ t sheet:" + sheetName);
// Zelle A1 des angegebenen Blattes aktivieren. activeA1Cell(wb.getSheet(sheetName)); }
FileOutputStream out = null;
try {
// Geben Sie die zu ändernde Excel-Datei an out = new FileOutputStream(fileName);
// schreiben wb.write(out); } catch (Exception e) { e.printStackTrace(); } finally { try {out.close();} catch (Exception e) {} try {wb.close();} catch (Exception e) {}
}
}
/**
Holen Sie sich alle Blattnamen.
@return Alle Blattnamen
*/
private List
return IntStream.range(0, wkBook.getNumberOfSheets())
.mapToObj(wkBook::getSheetAt)
.map(Sheet::getSheetName)
.collect(Collectors.toList());
}
/**
Aktivieren Sie Zelle A1 des angegebenen Blattes.
@param Blatt Blatt */ 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");
}
/**
Alle Excel-Dateinamen abrufen, die im angegebenen Pfad vorhanden sind.
(Wenn der angegebene Pfad eine Excel-Datei ist, wird der Name der Excel-Datei zurückgegeben.)
@param dir Pfad der abzurufenden Excel-Datei
@return Excel-Dateinamenliste
*/
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;
}
} ■ Ergebnisse Fall 1: In Zelle A1 befindet sich ein Wert (Blatt1 in BBB.xlsx). Fall 2: Kein Wert in Zelle A1 (Blatt 2 in BBB.xlsx) Fall 3: A1-Zelle ist eine zusammengeführte Zelle ohne Wert (Sheet3 in BBB.xlsx) Fall 4: A1-Zelle ist eine zusammengeführte Zelle und hat einen Wert (Sheet4 in BBB.xlsx)
-------- Nachricht an Konsole ausgeben ----------------- ....\AAA.xlsx ....\BBB.xlsx Konfigurationsdatei: .... \ AAA.xlsx Blatt: Blatt1 OK Konfigurationsdatei: .... \ BBB.xlsx Blatt: Blatt1 OK Blatt: Blatt2 OK Blatt: Blatt3 OK Blatt: Blatt4 OK
Recommended Posts