Saudações a todos. Desculpem se esta questão já tiver sido colocada. Preciso de uma solução para a partir de um recortar de dados numa planilha Excel, colar na planilha JTable. Já vi algumas rotinas, mas parecem antigas e algumas não funcionaram. Agradeço a força.
Já olhou esse post aqui?
A sequência de passos que você deve fazer é:
-
Ter um objeto que implementa a interface
ActionListener
, que vai receber as chamadas para interpretar o copy e o paste. -
Registrar esse objeto na tabela para eventos de atalho de teclado, através do método através do método
registerKeyboardAction
. -
No objeto que implementa
ActionListener
, você vai implementar o métodoactionPerformed(ActionEvent e)
, de forma a buscar dentro doActionEvent
se aquele evento se trata de copy ou paste, e a partir daí decidir o que fazer -
No caso de paste, entende-se que se trata de dados copiados do Excel e colados ali. Você precisa entender o que o Excel faz quando você seleciona e copia células. Ali no post (bem velho), o cara fala que é uma String, que separa células na horizontal com
\t
e na vertical (quebras de linha) com\n
. Por exemplo, imagine uma planilha no Excel com 4 células, 2 linhas e 2 colunas (um quadrado). Na primeira linha, há os números1
e2
. Na segunda, há os números3
e4
. Se você copiar essas 4 células, o resultado vai ser algo como1\t2\n3\t4
escrito na clipboard. Pode ser que isso tenha mudado, você tem que pesquisar sobre isso. -
No caso do copy, você vai ler da tua tabela e gerar essa String que o Excel possa entender quando o usuário cola-la dentro do mesmo.
Seja copy ou paste, você precisa saber utilizar a clipboard do sistema operacional. É dela que você vai ler os dados copiados do Excel, e é nela que você vai escrever os dados da tabela do teu programa, para serem colados no Excel.
Valeu Ivbarbosa. Vou estudar o assunto. Observo que copiar os dados de um jTable para o Excel já é direto, não necessitando de nenhum tratamento especial. Já havia lido este material. Pareceu-me antigo e talvez haja algo mais recente e prático.