读取word文档中的表格数据到access数据库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Word = Microsoft.Office.Interop.Word;
using System.Threading;
using office = Microsoft.Office.Core;
using System.Reflection;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    private Word.Application G_wa;//定义Word应用程序字段
    private object G_missing = System.Reflection.Missing.Value;//定义G_missing字段并添加引用

    protected void Page_Load(object sender, EventArgs e)
    {
        txtOpenPath.Text = Server.MapPath("~/File/明日公司.doc");//打开Word文档位置
        txtSavePath.Text = Server.MapPath("~/access.mdb");//保存Access文件位置
    }

    protected void btnNew_Click(object sender, EventArgs e)
    {
        try
        {
            InsertData();//执行插入数据方法
        }
        catch
        {
            Response.Write("<script>alert('插入信息失败,请确认Word中添入的信息是否正确!');</script>");//提示已经创建Word
        }

    }

    /// <summary>
    /// 向Access数据库插入数据方法
    /// </summary>
    private void InsertData()
    {
        G_wa = new Microsoft.Office.Interop.Word.Application();//创建应用程序对象
        object P_Path = txtOpenPath.Text;
        //打开Word文档
        Word.Document P_Document = G_wa.Documents.Open(
            ref P_Path, ref G_missing, ref G_missing, ref G_missing
            , ref G_missing, ref G_missing, ref G_missing, ref G_missing
            , ref G_missing, ref G_missing, ref G_missing, ref G_missing
            , ref G_missing, ref G_missing, ref G_missing, ref G_missing);
        try
        {
            Word.Range P_Range = P_Document.Range(ref G_missing, ref G_missing);//得到文档范围
            Word.Table P_Table = P_Range.Tables[1];//得到文档内的表格对象
            List<InstanceClass> P_List_InstanceClass = new List<InstanceClass>();//建立集合对象
            for (int i = 2; i < 7; i++)
            {
                //判断表格内是否已经添加信息
                if (P_Table.Cell(i, 1).Range.Text != "\r\a" &&
                    P_Table.Cell(i, 2).Range.Text != "\r\a" &&
                    P_Table.Cell(i, 3).Range.Text != "\r\a" &&
                    P_Table.Cell(i, 4).Range.Text != "\r\a")
                {
                    //向数据集合中添加数据
                    P_List_InstanceClass.Add(
                        new InstanceClass()
                        {
                            Name = P_Table.Cell(i, 1).Range.Text.Replace("\r\a", ""),
                            Chinese = float.Parse(P_Table.Cell(i, 2).Range.Text.Replace("\r\a", "")),
                            Math = float.Parse(P_Table.Cell(i, 3).Range.Text.Replace("\r\a", "")),
                            English = float.Parse(P_Table.Cell(i, 4).Range.Text.Replace("\r\a", ""))
                        });
                }
            }
            new DataTier().InsertMessage(P_List_InstanceClass);//向Access数据库中插入数据
            object P_Save = false;//创建object对象
            ((Word._Application)G_wa.Application).Quit(ref P_Save, ref G_missing, ref G_missing);//退出应用程序
            Response.Write("<script>alert('向Access中插入数据成功!');</script>");//提示已经创建Word
        }
        catch (Exception ex)
        {
            object P_Save = false;//创建object对象
            ((Word._Application)G_wa.Application).Quit(ref P_Save, ref G_missing, ref G_missing);//退出应用程序
            throw new Exception(ex.Message);//将异常抛向上一层
        }
    }

}
public class DataTier
{
    //定义连接字符串
    private string OLEConnection = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};User Id=Admin; Password=",
        HttpContext.Current.Server.MapPath("~") + @"\access.mdb");

    /// <summary>
    /// 从数据库中得到数据集合的方法
    /// </summary>
    /// <returns>返回数据集合</returns>
    public List<InstanceClass> GetMessage()
    {
        //创建数据适配器对象
        OleDbDataAdapter P_OleDbDataAdapter = new OleDbDataAdapter("select * from tb_grade", OLEConnection);
        DataTable dt = new DataTable();//创建数据表对象
        P_OleDbDataAdapter.Fill(dt);//填充数据表
        List<InstanceClass> P_List_InstanceClass = new List<InstanceClass>();//创建数据集合对象
        foreach (DataRow dr in dt.Rows)//遍历数据表
        {
            P_List_InstanceClass.Add(//向数据集合中添加数据
                new InstanceClass()
                {
                    id = (int)dr[0],
                    Name = dr[1].ToString(),
                    Chinese = (float)dr[2],
                    Math = (float)dr[3],
                    English = (float)dr[4]
                });
        }
        return P_List_InstanceClass;//返回数据集合对象
    }

    /// <summary>
    /// 向数据库中插入数据的方法
    /// </summary>
    /// <param name="ls">数据集合</param>
    public void InsertMessage(List<InstanceClass> ls)
    {
        using (OleDbConnection P_Connection = new OleDbConnection(OLEConnection))
        {
            P_Connection.Open();
            foreach (InstanceClass ic in ls)
            {
                OleDbCommand P_Command = new OleDbCommand();
                P_Command.Connection = P_Connection;
                P_Command.CommandText = string.Format(
                    "insert into [tb_grade](Name,Chinese,Math,English) values(@Name,@Chinese,@Math,@English)");
                P_Command.Parameters.Add("@Name", OleDbType.VarChar, 50).Value = ic.Name;
                P_Command.Parameters.Add("@Chinese", OleDbType.Single).Value = ic.Chinese;
                P_Command.Parameters.Add("@Math", OleDbType.Single).Value = ic.Math;
                P_Command.Parameters.Add("@English", OleDbType.Single).Value = ic.English;
                P_Command.ExecuteNonQuery();
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值