Поместите скобки вокруг имени файла для формулы Excel

Мой проект основан на Apache POI. Я пытаюсь использовать формулу для ячейки. Моя формула такова.

sheet7.createRow(0).createCell(0).setCellFormula("+'C:\\Users\\Desktop\\[Test.xlsx]Average_Graph'!A2");

Я использую JFileChooser, который позволяет пользователям выбирать файл. Поэтому путь к файлу будет изменяться каждый раз при использовании программы.

Из JFileChooser я получаю путь к файлу следующим образом.

 String filepath= "C:\\Users\\Desktop\\Sheet.xlsx"`

Чтобы формула работала правильно, путь к файлу должен иметь следующий формат.

"C:\\Users\\Desktop[Sheet.xlsx]"

Как я могу изменить строку, которую я получаю от JFileCHooser, для правильного выполнения формулы?

В вашей java-программе есть String с неправильными escape-символами. Это действительно так в исходном коде?

Federico klez Culloca 24.08.2018 09:39

Что значит "следующим образом"? Вы хотите вставлять скобки? Или получить только имя файла?

OneCricketeer 24.08.2018 09:41

Кроме того, правильный ли результат, без "\\" до "["?

Federico klez Culloca 24.08.2018 09:41

Как получить значение String?

deHaar 24.08.2018 09:41

Нет. Я разместил строку таким образом для простоты.

LSH94 24.08.2018 09:41

@ LSH94, затем попробуйте исправить опубликованный вами пример, а также попробуйте добавить больше кода. Не совсем понятно, чего вы хотите достичь.

akortex91 24.08.2018 09:41

@deHaar я получаю строку от JFileChooser.

LSH94 24.08.2018 09:42

@ cricket_007 Мне нужно добавить [] для имени файла и добавить другой \ для пути к файлу.

LSH94 24.08.2018 09:43

никто не поможет вам, если вы не покажете всю необходимую информацию

Marco Salerno 24.08.2018 09:43

@ LSH94, значит, вы хотите, чтобы String был заменен после того, как получил его от JFileChooser? Вы хотите вставить эти скобки или хотите только имя файла?

deHaar 24.08.2018 09:43

@ LSH94 поделитесь, пожалуйста, своим кодом. В противном случае недостаточно иметь людей, пытающихся рассуждать о том, что вы пытаетесь сделать, и предоставления информации в виде комментариев.

akortex91 24.08.2018 09:44
JFileChoser дает вам объект File, а не строку, AFAIK
OneCricketeer 24.08.2018 09:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
12
174
3

Ответы 3

Просто разделите имя родительского каталога и имя файла и поместите символы «[» и «]» вокруг имени файла:

    File select = fileC.getSelectedFile();
    String filepath = select.getParentFile().getAbsolutePath()+"["+select.getName()+"]";

* ИЗМЕНИТЬ Я неправильно понял вопрос, поэтому подумал о ложной проблеме;

Зачем ему нужны 2 разделителя файлов? Вероятно, он имеет два в начальной строке для побега.

Veselin Davidov 24.08.2018 09:44

Прочтите, пожалуйста, комментарии, там написано: «Я получаю строку от JFileChooser.». Таким образом, ему потребуется более гибкое решение.

Thomas 24.08.2018 09:44

Если у вас есть JFileChooser, у вас есть объект File, а не только String

И вы, должен, в любом случае используете API File или Paths, чтобы быть независимыми от ОС.

File f = jFileChooser.getSelectedFile();
String path = f.getParent();
String name = f.getName();

String newFormat = String.format("%s[%s]", path, name);

Учитывая, что ОП действительно хочет достичь описанного ими шаблона, это должен быть принятый ответ.

akortex91 24.08.2018 09:49

Это ясно и лаконично, и я думаю, что именно этого и просят.

Timothy T. 24.08.2018 09:52

@ cricket_007 Код, который вы указали, сделал свою работу. Но с другой стороны, мне нужно изменить его, чтобы получить вывод как C: \\ Users \\ Desktop \ [Sheet.xlsx] Пожалуйста, помогите.

LSH94 25.08.2018 17:17

Какие у вас трудности с добавлением последней косой черты? Java не хранит это внутри, а отображает только как escape-символ, поэтому я не понимаю, в чем проблема. В частности, вам не кажется, что это просто формат "%s\\[%s]"?

OneCricketeer 25.08.2018 18:22

Насколько я понимаю, вы получаете путь в виде строки из средства выбора файлов. Итак, в вашем примере вы можете:

   String filepath= "C:\\Users\\Desktop\\Sheet.xlsx"
   Path path = Paths.get(filepath);
   String result=path.getParent()+"["+path.getFileName()+"]";

И результатом будет ваша новая строка, содержащая файл, окруженный фигурными скобками

Или другое решение будет использовать файл

  File f=new File(filepath);
  String result=f.getParent()+"["+f.getName()+"]";

Другие вопросы по теме