2015-07-06 1 views
0

Я копирую данные из excel и вставляя их в форму окна с нажатием кнопки.Copy Paste from Excel

Скопированные данные из excel разделяются и заполняются четырьмя текстовыми полями. Все texboxes заполняются так, как ожидалось, но последнее текстовое поле получает дополнительные «\ r \ n». Он не отображается в текстовом поле, но если я поставил точку останова и посмотрел на переменную, то есть дополнительный \ r \ n.

Переменная, которую я хватаю, выглядит как этот тест \ r \ n.

Я знаю, что могу заменить это на «», но есть ли способ избежать этого.

Вот код для моего обработчика событий вставки.

if (Clipboard.GetText() != null) 
      { 
       string s = Clipboard.GetText(); 
       string[] lines = s.Split('\t'); 
       if (lines.Length < 3) 
       { 
        DialogResult result = MsgBox.Show("Please copy valid data with tab space.", "Incorrect data format.", MsgBox.Buttons.OK, MsgBox.Icon.Exclamation, MsgBox.AnimateStyle.ZoomIn); 
        //MessageBox.Show("Please copy valid data with tab space.", "Incorrect data format.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); 
       } 

       else 
       { 
        green_textBox_ref.Text = lines[0].Replace(" ", ""); 
        green_textBox1.Text = lines[1].Replace(" ", ""); 
        green_textBox2.Text = lines[2].Replace(" ", ""); 
        green_textBox3.Text = lines[3].Replace(" ", ""); 
        green_textBox_ref.Enabled = false; 
        green_textBox1.Enabled = false; 
        green_textBox2.Enabled = false; 
        green_textBox3.Enabled = false; 
        paste_green.Enabled = false; 
       } 
      } 

      else 
      { 
       DialogResult result = MsgBox.Show("There is no data to paste.", "No data", MsgBox.Buttons.OK, MsgBox.Icon.Error, MsgBox.AnimateStyle.ZoomIn); 
       //MessageBox.Show("There is no data to paste.", "No data", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 

      } 

     } 

И вот скриншот точки останова.

enter image description here

+1

Хм .. не уверен, что вы можете контролировать, как путы Excel данных в буфер обмена. Похоже, вы могли бы использовать метод 'string.Trim', хотя ... – Baldrick

ответ

1

Вы можете удалить, что окончание строки новой строки несколько различных способов. Поскольку вы уже разделяете строку, вы можете сказать, что она обрабатывает новую строку как дополнительный разделитель и удаляет пустые подстроки.

string[] lines = 
    s.Split(new[] {"\t", Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); 

В качестве альтернативы, вы можете использовать TrimEnd() для обрезки специальных символов с конца строки.

green_textBox3.Text = lines[3].Replace(" ", "").TrimEnd('\r', '\n'); 

Я сомневаюсь, что есть способ предотвратить его включение в ClipBoard при копировании из Excel.

0

Как вы не можете избежать \ t, вы не можете избежать получения \ r \ n. Вот как клиент-пастыр знает о табличных данных с помощью \ t \ r и \ n.

Если вы скопируете диапазон Excel, в котором есть несколько строк, вы получите много \ r \ n.

Лучше всего удалить \ r \ n используя метод String.Replace.

0

Новая строка в ячейке Excel является символом CR, который является «\ r» в C#.

Как ответил GSerghttp.

Можно удалить дополнительный контент по:

s.ToString().TrimEnd('\r', '\n'); 

или заменить:

text = text.Replace("\r\n", ""); 

Пример:

string OriginString = "\r\n\r\nText goes here\r\n"; 
string NewString = OriginString.Replace("\r\n", ""); 

 Смежные вопросы

  • Нет связанных вопросов^_^