Excel从另一个Excel文件中用户自定义区域(UsedRange)拷贝数据和行高、列宽

实现环境:Visual Studio 2010, Office 2010, VSTO 4.0, .NET Framework 4.0

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using Excel = Microsoft.Office.Interop.Excel;
using System.Windows.Forms;

namespace ExcelAddIn8
{
    public partial class Ribbon1
    {
        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {

        }
        
        /// <summary>
        /// 在下面的动作中,将从选中的文件中的用户自定义区域(UsedRange)中拷贝
        /// 数据到现在这个WorkSheet中并根据选中文件中UsedRange的行高列宽来设定被
        /// 粘贴数据区域的行高列宽。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            var missing = Type.Missing;
            string SourcePath = string.Empty;
            Excel.Application objApplication = Globals.ThisAddIn.Application;
            Excel.Application objSourceApplication = new Excel.Application();
            Excel.Workbook objTargetWorkbook = objApplication.ActiveWorkbook;
            OpenFileDialog objOpenFileDialog = new OpenFileDialog();
            objOpenFileDialog.Filter = "Excel Document(.xlsx)|*.xlsx";
            objOpenFileDialog.ShowDialog();
            SourcePath = objOpenFileDialog.FileName;
            if (SourcePath.Length > 0)
            {
                Excel.Workbook objSourceWorkbook = objSourceApplication
                    .Workbooks.Open(SourcePath, missing, missing, missing,
                    missing,missing,missing,missing, missing, missing, missing, 
                        missing, missing,missing, missing);
                Excel.Worksheet objWorkSheet = objSourceWorkbook.Worksheets[1];
                objWorkSheet.UsedRange.Copy(missing);
                
                Excel.Worksheet objTargetSheet =
                    objTargetWorkbook.ActiveSheet;
                if (objTargetSheet != null)
                {
                    objTargetSheet.Paste();
                    Excel.Range objTargetRange = objApplication.ActiveCell;
                    //以下代码用来重新设定Range区域,使之与源文件中的UsedRange范
                    //围相当。
                    objTargetRange = objTargetSheet.Range[objTargetSheet.Cells
                        [objTargetRange.Row, objTargetRange.Column],
                        objTargetSheet.Cells[objTargetRange.Row 
                            + objWorkSheet.UsedRange.Rows.Count-1,
                           objTargetRange.Column + 
                           objWorkSheet.UsedRange.Columns.Count]];
                    //根据UsedRange的列宽来设置选定区域的列宽。
                    objTargetRange.ColumnWidth = objWorkSheet.UsedRange
                        .ColumnWidth;
                    //根据UsedRange的行高来设置选定区域的行高。
                    objTargetRange.RowHeight = objWorkSheet.UsedRange.RowHeight;
                }
            }
            ((Excel._Application)objSourceApplication).Quit();
            objSourceApplication = null;
        }
    }
}

相关资源: http://download.csdn.net/detail/tx_officedev/3900007

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Sub ReadFromExcel() Dim xlApp As Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet Dim Range As Excel.Range Dim rowNum As Integer Dim colNum As Integer Set xlApp = CreateObject("Excel.Application") Set xlWorkBook = xlApp.Workbooks.Open("C:\Users\My Documents\ExcelFile.xlsx") Set xlWorkSheet = xlWorkBook.Sheets("Sheet1") Set Range = xlWorkSheet.Range("A1:B4") rowNum = Range.Rows.Count colNum = Range.Columns.Count For i = 1 To rowNum For j = 1 To colNum Debug.Print Range.Cells(i, j).Value Next j Next i xlWorkBook.Close xlApp.Quit End Sub ### 回答2: 以下是使用CADVBA代码读取Excel文件数据的示例: ``` Sub ReadExcelData() Dim excelApp As Object Dim excelWorkbook As Object Dim excelWorksheet As Object Dim excelRange As Object ' 创建Excel应用程序对象 Set excelApp = CreateObject("Excel.Application") ' 打开Excel文件 Set excelWorkbook = excelApp.Workbooks.Open("C:\路径\文件名.xlsx") ' 选择要读取的工作表 Set excelWorksheet = excelWorkbook.Sheets("Sheet1") ' 指定要读取的数据范围 Set excelRange = excelWorksheet.Range("A1:D10") ' 循环读取每个单元格的数据并在CAD进行处理 For Each cell In excelRange ' 在CAD使用cell.Value进行处理 ' 例如: ' 如果要在CAD创建一个点对象,可以使用以下代码: ' ' Dim point As AcadPoint ' Set point = ThisDrawing.ModelSpace.AddPoint(cell.Value(1), cell.Value(2), cell.Value(3)) ' Next cell ' 关闭Excel文件 excelWorkbook.Close ' 退出Excel应用程序 excelApp.Quit ' 释放Excel对象 Set excelRange = Nothing Set excelWorksheet = Nothing Set excelWorkbook = Nothing Set excelApp = Nothing End Sub ``` 以上代码将通过CADVBA从Excel文件读取数据范围为"A1:D10"的单元格数据,并在CAD进行处理。对于每个单元格,你可以使用cell.Value将其数据用于CAD的其他操作。注意,你需要根据自己的文件路径和数据范围进行相应的修改。 ### 回答3: 下面是一个简单的CADVBA代码示例,用于读取Excel文件数据: ```vba Sub ReadExcelData() Dim ExcelApp As Object Dim ExcelWorkbook As Object Dim ExcelWorksheet As Object Dim FilePath As String Dim RowCount As Integer Dim ColumnCount As Integer Dim CurrentRow As Integer Dim CurrentColumn As Integer ' 打开Excel应用程序 Set ExcelApp = CreateObject("Excel.Application") ' 设置Excel应用程序是否可见 ExcelApp.Visible = True ' 打开Excel文件 FilePath = "C:\YourFilePath\YourExcelFile.xlsx" Set ExcelWorkbook = ExcelApp.Workbooks.Open(FilePath) ' 选择第一个工作表 Set ExcelWorksheet = ExcelWorkbook.Worksheets(1) ' 获取数据的行数和列数 RowCount = ExcelWorksheet.UsedRange.Rows.Count ColumnCount = ExcelWorksheet.UsedRange.Columns.Count ' 遍历每一行和每一列,读取数据 For CurrentRow = 1 To RowCount For CurrentColumn = 1 To ColumnCount ' 读取单元格的数值并将其赋值给CAD的变量或对象 ThisDrawing.ModelSpace.AddText ExcelWorksheet.Cells(CurrentRow, CurrentColumn).Value, _ ThisDrawing.ModelSpace.AddPoint(CurrentRow, CurrentColumn, 0) Next CurrentColumn Next CurrentRow ' 关闭Excel文件 ExcelWorkbook.Close ' 关闭Excel应用程序 ExcelApp.Quit ' 释放Excel对象 Set ExcelWorksheet = Nothing Set ExcelWorkbook = Nothing Set ExcelApp = Nothing End Sub ``` 请注意替换代码文件路径(FilePath)为你自己Excel文件的路径。此代码将打开指定的Excel文件,选择第一个工作表,然后遍历每个单元格的数据,并在CAD添加文本和点。你可以根据需要修改代码来适应你的具体情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值