C#将wps表格读到datatable中并显示在页面

来源:互联网 发布:知彼定位 编辑:程序博客网 时间:2024/04/28 00:17

   本文主要讲如何利用金山的ET动态链接库读取wps表格,因为这方面好像很少有代码贴出来所以自己搜索了一些资料,自己研究了一下。在这里和大家共享一下吧!

(一)环境配置

    我在电脑上安装的是wps2012增强版。安装好之后,新建一个wpf项目。然后在项目中添加引用,点击com,把Kingsoft ET 2.0 object library.dll添加到引用到项目中。

显示表格用的是dev的空间gridcontrol,在windows中加入一个gridcontrol控件。

(二)类建立

  这里采集数据的方式和微软的excel有点不一样,微软的是通过访问数据库,对表格进行填充的。这里,我对wps表格的数据库连接不熟悉,也没有例程,所以采用的方法是将每一行数据读取出来建立行,然后添加到datatable中。

  具体代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Threading.Tasks;
using ET;
namespace wps接口测试
{
    class WPSET
    {
        /// <summary>
        /// 要导入的表格的路径
        /// </summary>
        public  string path;
        /// <summary>
        /// 表格列数
        /// </summary>
        public string tablename;
        public int col;
        /// <summary>
        /// 表格行数
        /// </summary>
        public int row;
        /// <summary>
        /// 存放表的列名称
        /// </summary>
        public string[] filedname;
        ET.Application my_excel;
        ET._Workbook my_book;
        ET.Worksheet my_sheet;
        ET.Range my_range;
        /// <summary>
        /// 存放到datatable类型中
        /// </summary>
        public DataTable table=new DataTable();
        public WPSET(String path)
        {
            this.path = path;
            my_excel = new Application();
            my_book = my_excel.Application.Workbooks.Open(path);
            my_sheet = my_book.Sheets[1];
            my_range = my_sheet.UsedRange;
            row = my_range.Rows.Count;
            col = my_range.Columns.Count;
            SetColumn();
            SetRowValue();
            Settablename();
            my_excel.Application.Workbooks.Close();//这里一定要关闭,否则程序执行完之后,et.exe不会清除。而且是执行一次多一个et.exe进程。
        }
        /// <summary>
        /// 获取列名(列名为第一行)
        /// </summary>
        void SetColumn()
        { 
           filedname=new string[col];
           for (int i = 0; i < col; i++)
           {
               filedname[i] =my_range.get_Item(1, i+1).Text;
               var datacolumn = new DataColumn();
               datacolumn.ColumnName = filedname[i];
               table.Columns.Add(datacolumn);
           }
        }
        /// <summary>
        /// 获取每一行的值
        /// </summary>
        void SetRowValue()
        {
            for (int i = 1; i < row; i++)
            {
                DataRow datarow = table.NewRow();
                for (int j = 0; j < col; j++)
                {                   
                    datarow[filedname[j]] = my_range.get_Item(i + 1, j + 1).Text;
                }
                table.Rows.Add(datarow);
            }
        }

      /// <summary>
        /// 获取文件名
        /// </summary>
        void Settablename()
        {
            string[] str;
            str = path.Split('\\');
            tablename = str[str.Length - 1];
            tablename = tablename.Substring(0,tablename.IndexOf('.'));
        }
    }
}

(3)主函数调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Data;
using System.Data.Odbc;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using AddInDesignerObjects;
using Xpf= DevExpress.Xpf.Grid;
using ET;


namespace wps接口测试
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow :System.Windows.Window
    {
        public MainWindow()
        {
            InitializeComponent();
            string pathname = @"E:\zjwms\CMS\相关文档\3月份(2).xls";    //这里是文件路径
            WPSET et = new WPSET(pathname);
            for (int i = 0; i < et.filedname.Length; i++)  //gridcontroll控件的列名绑定
            {
                Xpf.GridColumn tablecolumn = new Xpf.GridColumn();
                tablecolumn.FieldName = et.filedname[i];
                show.Columns.Add(tablecolumn);
            }
            this.Title = et.tablename;
            this.show.ItemsSource = et.table;
        }
    } 
}

下面附带效果图。项目文件http://download.csdn.net/detail/u014489375/9584456。

1 0
原创粉丝点击