乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 29|回复: 1

新手帖:如何从Excel剪贴板获得二维数组

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2012-12-16 17:09:00 | 显示全部楼层 |阅读模式
学习使用C#来开发已经近两周。
由于开发的是工程小,免不了经常需要在Cad和Excel的数据间进行切换。
这里贴出一段代码,示例如何从Excel按Ctrl+C后(剪贴板)生成一个二维数组。
但这段代码希望高手能够提供改进意见,因为有如下问题仍未处理:
1)未判断数据类型是否来自于Excel
2)未判断剪贴板上是否有数据
  1. public static double[][] GetDataFromExcel()
  2.         {
  3.             if (System.Windows.Forms.Clipboard.GetDataObject() != null) // 确保粘贴板中有内容
  4.             {
  5.                 Document dc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  6.                 Editor ed = dc.Editor;
  7.                 IDataObject io = System.Windows.Forms.Clipboard.GetDataObject();
  8.                 string strSum = (string)io.GetData(DataFormats.Text);
  9.                 string[] strRows = strSum.Split('\n');
  10.                 int rowNum = strRows.Length-1; // 获得行数
  11.                 string[] strCols = strRows[1].Split('\t');
  12.                 int colNum = strCols.Length;
  13.                 double[][] res = new double[rowNum][];
  14.                 for (int i = 0; i < rowNum; i++)
  15.                 {
  16.                     res[i] = new double[colNum];
  17.                     string[] newCol = strRows[i].Split('\t');
  18.                     for (int j = 0; j < colNum; j++)
  19.                     {
  20.                         try
  21.                         {
  22.                             res[i][j] = double.Parse(newCol[j]);
  23.                         }
  24.                         catch (System.Exception err)
  25.                         {
  26.                             ed.WriteMessage("\n 数据有误" + err.Message);
  27.                         }
  28.                         finally
  29.                         {
  30.                             ed.WriteMessage("\n" + res[i][j].ToString());
  31.                         }
  32.                     }
  33.                 }
  34.                 return res;
  35.                 // 以下为测试代码
  36.                 //Document rxDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  37.                 //Editor ed = rxDoc.Editor;
  38.                 //for (int i = 0; i < rowNum; i++)
  39.                 //{
  40.                 //    ed.WriteMessage("\n");
  41.                 //    for (int j = 0; j < colNum; j++)
  42.                 //    {
  43.                 //        ed.WriteMessage(res[i][j].ToString() + "\t");
  44.                 //    }
  45.                 //}
  46.                 ////return res;
  47.                 //ed.WriteMessage("\n 共" + rowNum.ToString()+"行");
  48.                 //ed.WriteMessage("\n 共" + colNum.ToString() + "列");               
  49.             }
  50.             else
  51.             {
  52.                 Document rxDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  53.                 Editor ed = rxDoc.Editor;
  54.                 ed.WriteMessage("\n检测到未从Excel中复制内容,请重试。");
  55.                 double[][] res = new double[1][];
  56.                 return res;
  57.             }
  58.         }

注意包含以下API空间引用:
  1. using System.Data;
  2. using System.IO;
  3. using System.Windows.Forms;
  4. using System.Web;
  5. using System.Reflection;
  6. using excel = Microsoft.Office.Interop.Excel;
  7. using System.ComponentModel;
  8. using System.Runtime.Serialization.Formatters.Binary;

可取消注释掉的代码在命令行内看执行结果。
回复

使用道具 举报

14

主题

43

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2012-12-20 16:01:00 | 显示全部楼层
DataFormats可以判断类型。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:16 , Processed in 0.408460 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表