Я переношу некоторые данные из Anylogic в Excel. Это происходит каждый раз, когда агент входит в блок ожидания, и я сохраняю его идентификатор, время обработки и дату выполнения. Что будет выглядеть так:
Через час я хотел бы, чтобы файл Excel был очищен (за исключением заголовков «ID», «p» и «d» (через час заказы освобождаются из блока ожидания).
Чтобы в следующем часе в файле Excel были только данные по заказам, пришедшим во второй час
Я попытался сделать это с помощью события, вызванного через час, со следующим кодом, который я нашел в ответе на аналогичный вопрос:
for (int i=0;i<15;i++){ //for each column
for (int j=2;j<50000;j++){ //for each row
ALtoGA.clearCell(1,j,i);
}
}
Однако это очищает только записи во второй строке, и я хочу, чтобы все мои записи были очищены. Кто-нибудь знает как это сделать?
Я не буду отвечать на этот вопрос, вместо этого я скажу вам, что писать и удалять вещи из файла Excel - плохая практика...
Вместо этого вам следует создать класс, который будет иметь параметр для каждого столбца.
public class ExportInfo(){
public int id;
public int P;
public int d;
public ExportInfo(int id,int P, int d) {
this.id=id;
this.P=P;
this.d=d;
}
}
Тогда вам нужна коллекция, такая как linkedList с элементами типа ExportInfo
Затем вы просто добавляете строки в этот связанный список
yourList.add(new ExportInfo(a,b,c));
тогда, когда вы хотите удалить все
yourList.clear();
Затем вы можете просто экспортировать в Excel, когда он действительно представляет для вас ценность:
int row=2;
for(ExportInfo e : yourList){
col=1;
ALtoGA.setCellNumericValue(e.id,1,row,col++);
ALtoGA.setCellNumericValue(e.P,1,row,col++);
ALtoGA.setCellNumericValue(e.d,1,row,col++);
row++;
}
ALtoGA.writeFile();
что-то вроде этого
Чтобы удалить все данные из таблицы, вы можете вызвать 'deleteFrom(tableName).execute();'
Но вы не должны писать или удалять из таблиц во время выполнения, это излишне замедляет работу вашей модели.