无法将MS-Excel列粘贴到SWT的文本小部件中

时间:2011-12-08 06:51:47

标签: java excel swt

我有使用SWT.SINGLE样式创建的SWT Text小部件 例如

Text  myTextControl  = new Text(shell, SWT.SINGLE);

现在,当我尝试从MS-Excel复制列时,只有该选定列的第一个被粘贴到文本小部件中,而不是整个列。
我确实理解当我使用Text创建SWT.MULTI小部件时,我可以将整个excel列粘贴到小部件中,但它不会在单行中。

以前,我使用的是Swings JTextField,在这种情况下,每当我粘贴MS-Excel列(使用CTRL-V)时,整个excel列都会被粘贴为JTextField中的一行。<登记/> 我正在为SWT Text小部件寻找相同类型的功能。

1 个答案:

答案 0 :(得分:2)

问题在于Excel在所选列中的每个单元格之后放置的新行字符。 Text.SINGLE然后识别粘贴文本中的行尾并修剪它。

此代码获取粘贴事件并替换所选的所有新行字符

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class PasteModify {

    private final String lineReplaceString = ", ";

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new RowLayout(SWT.VERTICAL));

        Text tfPaste = new Text(shell, SWT.BORDER);
        tfPaste.setText("paste excel column here");
        tfPaste.addListener(SWT.Verify, new Listener() {

            @Override
            public void handleEvent(Event event) {
                event.text = event.text.replace("\n", PasteModify.this.lineReplaceString);
            }
        });
        shell.setBounds(50, 50, 300, 200);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}