多个单元格的复制

    '引用 Microsoft Excel 11.0 Object Library
    Dim xlsApp As Excel.Application
    Dim eworkbook As Workbook
    Dim eworksheet As Worksheet
    Dim rantmp As Range
    Dim rantmp2 As Range
    '判断文件是否存在
    If Dir("F:/Book1.xls") = "" And Dir("F:/Book2.xls") = "" Then
        MsgBox "F:/Book1.xls 不存在。" & vbCrLf & "F:/Book2.xls", vbInformation, "Error"
    ElseIf Dir("F:/Book1.xls") = "" Then
        MsgBox "F:/Book1.xls 不存在。", vbInformation, "Error"
    ElseIf Dir("F:/Book2.xls") = "" Then
        MsgBox "F:/Book2 不存在。", vbInformation, "Error"
    Else
        '复制
        Set xlsApp = New Excel.Application
        Set eworkbook = xlsApp.Workbooks.Open("F:/Book1.xls")
        Set eworksheet = eworkbook.Sheets("Sheet1")
        Set rantmp = eworksheet.Range("A1:A8")
        rantmp.Copy

        '粘贴
        Set eworkbook = xlsApp.Workbooks.Open("F:/Book2.xls")
        Set eworksheet = eworkbook.Sheets("Sheet1")
        Set rantmp2 = eworksheet.Range("B9:B16")
        eworksheet.Range("B9:B16").Select
        ActiveSheet.Paste
        '关闭
        eworkbook.Save
        eworkbook.Close
        xlsApp.Quit
    End If

可以通过重载QTableWidget的keyPressEvent()函数来实现多个单元格复制粘贴。以下是一个示例代码: ```c++ void MyTableWidget::keyPressEvent(QKeyEvent *event) { if (event->matches(QKeySequence::Copy)) { // 复制 QList<QTableWidgetItem*> items = this->selectedItems(); if (!items.isEmpty()) { QString text; for (int i = 0; i < items.count(); i++) { QTableWidgetItem* item = items.at(i); text += item->text(); if (i < items.count() - 1) { text += '\t'; } } QApplication::clipboard()->setText(text); } } else if (event->matches(QKeySequence::Paste)) { // 粘贴 QString text = QApplication::clipboard()->text(); QStringList rows = text.split('\n'); int startRow = this->currentRow(); int startColumn = this->currentColumn(); for (int i = 0; i < rows.count(); i++) { if (startRow + i >= this->rowCount()) { this->setRowCount(startRow + i + 1); } QStringList columns = rows.at(i).split('\t'); for (int j = 0; j < columns.count(); j++) { if (startColumn + j >= this->columnCount()) { this->setColumnCount(startColumn + j + 1); } QTableWidgetItem* item = new QTableWidgetItem(columns.at(j)); this->setItem(startRow + i, startColumn + j, item); } } } else { QTableWidget::keyPressEvent(event); } } ``` 这个示例代码中,当用户按下“复制”快捷键时(默认为Ctrl+C),程序会将所有选中的单元格的文本拼接在一起,并用制表符分隔,然后将结果放入剪贴板中。 当用户按下“粘贴”快捷键时(默认为Ctrl+V),程序会从剪贴板中读取文本,并将其按行和列分割成多个单元格。然后程序会将这些单元格插入到当前单元格的右侧和下方。 如果用户按下的不是“复制”或“粘贴”快捷键,则会调用基类的keyPressEvent()函数,以便处理其他键盘事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值