def _handle_table_paste(self): indices = [] for index in self.tableView.selectedIndexes(): indices.append((index.row(), index.column())) if not indices: return top_left = indices[0] data_type = QApplication.instance().clipboard().mimeData() if not data_type.hasText(): # Don't paste images etc. return clipboard_text = QApplication.instance().clipboard().text() copied_table = extract_table_from_clipboard_text(clipboard_text) if len(copied_table) == 1 and len(copied_table[0]) == 1: # Only one value, so put it in all selected cells self._do_bulk_update(copied_table[0][0]) return self.model.update_data_from_clipboard( copied_table, top_left, self._get_hidden_column_indices())
def test_non_empty_cells_surrounded_by_empty_cells(self): clipboard_data = '\t\t\t\n\tB2\tC2\t\n\tB3\tC3\t\r\n\t\t\t' table_data = [['', '', '', ''], ['', 'B2', 'C2', ''], ['', 'B3', 'C3', ''], ['', '', '', '']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == \ '\t\t\t\n\tB2\tC2\t\n\tB3\tC3\t\n\t\t\t'
def test_mix_of_non_empty_cells_and_empty_cells(self): clipboard_data = '\tB1\nA2\t' table_data = [['', 'B1'], ['A2', '']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_multiple_non_empty_cells_with_excel_encoding(self): # Excel uses \r\n as the line separator clipboard_data = 'A1\tB1\r\nA2\tB2' assert extract_table_from_clipboard_text(clipboard_data) \ == [['A1', 'B1'], ['A2', 'B2']]
def test_multiple_non_empty_cells(self): clipboard_data = 'A1\tB1\nA2\tB2' table_data = [['A1', 'B1'], ['A2', 'B2']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_multiple_empty_cells(self): clipboard_data = '\t\n\t' table_data = [['', ''], ['', '']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_non_empty_column(self): clipboard_data = 'A\nB' table_data = [['A'], ['B']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_non_empty_row(self): clipboard_data = 'A\tB\tC' table_data = [['A', 'B', 'C']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_empty_row(self): clipboard_data = '\t\t' table_data = [['', '', '']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_one_non_empty_cell(self): clipboard_data = 'A' table_data = [['A']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_convert_and_extract_table_for_empty_column(): clipboard_data = '\n' table_data = [[''], ['']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data
def test_convert_and_extract_table_for_one_empty_cell(): clipboard_data = '' table_data = [['']] assert extract_table_from_clipboard_text(clipboard_data) == table_data assert convert_table_to_clipboard_text(table_data) == clipboard_data