Как удалить возврат каретки из строки при вставке содержимого в файл Excel

У меня возникла проблема при вставке моего содержимого (или текста), сгенерированного кодом Java, в Excel. Проблема в том, что мой Java-код генерирует строку с несколькими строками, то есть с включенными разрывами строк (\n). Когда я пытаюсь скопировать этот контент и вставить его в файл Excel, я получаю многострочный текст с квадратным символом. Я узнал, что Windows использует \r\n для разрыва строки, а не только \n. Я попытался заменить свой \n на \r\n и вставить сгенерированный текст, но я получаю те же квадратные поля в своем файле Excel. Вот мой пример кода:

      String   myString = "a1\nb1";
      String   tmpString =myString.replace("\n","\r\n");
      System.out.println( "Original = " +"\""+myString+"\"");
      System.out.println( "Result   = " +"\""+tmpString+"\"");

Я использовал " " для переноса текста. Когда я попытался вставить tmpstring в Excel, я получил квадратную рамку. Как удалить поля с несколько строк в моей ячейке?


person chaithu    schedule 23.10.2009    source источник
comment
Для чего-то вроде ABC\n12 вы получаете один квадрат в конце или после каждой строки?   -  person A9S6    schedule 08.01.2010


Ответы (5)


Вы хотите возврат каретки/новую строку или нет? Ваш заголовок говорит, что вы этого не делаете, ваш код явно добавляет возврат каретки, когда в строке есть новая строка. Если вы хотите избавиться от обоих, используйте String.replaceAll(), который принимает регулярное выражение:

public static void main(String[] argv)
throws Exception
{
    String s1 = "this\r\nis a test";
    String s2 = s1.replaceAll("[\n\r]", "");
    System.out.println(s2);
} 

В этом примере выполняется поиск всех вхождений символов и их удаление. Вы, вероятно, захотите найти последовательность символов и заменить ее пробелом, но я оставлю это на ваше усмотрение: посмотрите документ для java.util.regex.Pattern.

И я подозреваю, что "коробка" - это какой-то другой символ, а не возврат или перевод строки.

person kdgregory    schedule 23.10.2009
comment
Спасибо за ваш ответ. Когда вы попробуете код, опубликованный вами, он также удалит несколько строк в моем тексте, когда я вставлю его в Excel, чего я не хочу делать. И поле возвращает значение ascii 10, когда я проверяю его как символ - person chaithu; 23.10.2009
comment
+1 - Старый пост для вас, но полезное решение для меня :) Спасибо! - person My Head Hurts; 20.04.2011
comment
должно быть [\r\n] в строке: String s2 = s1.replaceAll("[\n\r]", ""); - person alan-p; 20.12.2012
comment
@alan-p - это регулярное выражение, поэтому будет соответствовать любому из символов в скобках, независимо от порядка. - person kdgregory; 20.12.2012

Почему бы вам не скопировать и вставить, как обычно, а затем выполнить поиск и замену в Excel?

person o.k.w    schedule 23.10.2009
comment
Мне нужно программно скопировать текст в буфер обмена, а затем вставить его в Excel. Здесь я упомянул только пример кода. Я не должен получать эти текстовые поля при вставке. - person chaithu; 23.10.2009

Если это поможет, я запустил эту строку кода (С#)

Clipboard.SetText("1\n2\r\n3");

а затем Ctrl-V в Excel, и 3 ячейки были заполнены: A1 получил 1, A2 получил 2 и A3 получил 3. Это означает, что \n и \r\n обрабатываются Excel, как и ожидалось. Строки Java, содержащие \n и \r\n, также должны работать. Это наводит меня на мысль, что что-то не так с настройками ячейки Excel. Проверьте, отформатированы ли ячейки как текст.

В остальном без понятия, извините.

person tzup    schedule 23.10.2009

class Test {
    public static void main(String args[])
    System.out.print("Hello\rHi");
}

Благодаря \r курсор перемещается в начало текущей строки, поэтому "He" в слове Hello заменяется на "Hi".

person simon    schedule 29.08.2013

Попробуйте это =)

String s1 = "this\r\nis a test";
String s2 = s1.replaceAll("(\\r|\\n)", "");
System.out.println(s2);
person Mr. Effting    schedule 17.01.2014