整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

在Access中,如何轻松导入这些外部数据

用 Access 可以很好地管理各种数据, 但是在实际应用中, 许多数据并不是使用 Access 来收集的, 此时, 为了使用 Access 管理其他软件或程序收集到的数据, 可以将收集到的数据导入 Access 中。

在 Access 数据库中, 可以将其他的 Access 数据库、 ODBC 数据库、 Excel 表格、 HTML 文档和文本文件等外部数据导入当前数据库中, 下面将分别介绍。

1.从其他Access 数据库导入

如果要将其他 Access 数据库导入数据库对象, 既可以使用复制和粘贴的方法, 也可以使用【导入向导】来完成。 使用【导入向导】 可以在不打开 Access 的情况下完成, 其具体操作步骤如下。

Step 01 打开"销售管理数据 .accdb",单击【外部数据】 选项卡【导入并链接】 组中的【新数据源】 下拉按钮,在弹出的下拉菜单中选择【从数据库】选项,在弹出的级联菜单中选择【Access】 选项, 如图所示。

Step 02 打开【获取外部数据 -Access数据库】 对话框, 单击【文件名】文本框右侧的【浏览】 按钮, 如图所示。

Step 03 打开【打开】 对话框,选择要导入的数据库,单击【打开】按钮,如图所示。

Step 04 返回【获取外部数据 -Access数据库】 对话框,选中【将表、 查询、 窗体、 报表、 宏和模块导入当前数据库】单选按钮,单击【确定】按钮, 如图所示。

技术看板

选中【将表、 查询、 窗体、 报表、宏和模块导入当前数据库】单选按钮,表示导入后的对象与源对象是独立的,没有任何关系。 如果选中【通过创建链接表来链接到数据源】 单选按钮,会在当前数据库中创建一个链接表,链接到源数据库对象上, 此链接表的改动是双向的, 无论修改源对象还是当前数据库对象, 都会同步反映给双方。 在 Access 中, 利用该链接功能,可以实现文件的共享。

Step 05 打开【导入对象】 对话框, 在6 个选项卡中分别显示了源数据库中的各个对象, 选择【表】 选项卡中的【年度销售记录】 选项,单击【确定】 按钮如图所示。

Step 06 返回【获取外部数据 -Access数据库】 对话框,选中【保存导入步骤】 复选框; 在【另存为】文本框中输入名称,单击【保存导入】 按钮, 如图所示。

Step 07 操作完成后, 即可导入选择的数据库, 如图所示。

2. 从 Excel电子表格导入

对于一般用户而言, 对 Excel 的熟悉程序远远高于 Access, 尤其是在操作表格数据时, Excel 的界面更加直观, 操作也更为简洁。 所以, 用户可以先在 Excel 中编辑好数据, 然后将其导入 Access 中, 从而方便快捷地制作表对象, 具体操作步骤如下。

Step 01 打开"销售管理数据 .accdb",单击【外部数据】 选项卡【导入并链接】 组中的【新数据源】下拉按钮,在弹出的下拉菜单中选择【从文件】选项,在弹出的级联菜单中选择【Excel】 选项, 如图所示。

Step 02 打开【获取外部数据 -Excel 电子表格】 对话框, 单击【文件名】文本框右侧的【浏览】 按钮, 如图所示。

Step 03 打开【打开】 对话框,选择要导入的 Excel电子表格,单击【打开】 按钮, 如图所示。

Step 04 返回【获取外部数据 -Excel 电子表格】 对话框,选中【将源数据导入当前数据库的新表中】 单选按钮,单击【确定】按钮,如图所示。

Step 05 打开【导入数据表向导】对话框,选中【显示工作表】 单选按钮,单击【下一步】 按钮,如图所示。

Step 06 在【导入数据表向导】 对话框中,选中【第一行包含列标题】复选框,单击【下一步】 按钮,如图所示。

Step 07 在【导入数据表向导】 对话框中的【字段选项】 栏分别指定每个字段的名称、 数据类型、 索引等信息, 如指定【销售编号】字段的【索引】为【有(无重复)】,单击【下一步】 按钮,如图所示。

Step 08 在【导入数据表向导】 对话框中,选中【我自己选择主键】 单选按钮,在右侧的下拉列表框中选择【销售编号】 选项,单击【下一步】 按钮, 如图所示。

Step 09 在【导入数据表向导】 对话框中, 在【导入到表】 文本框中指定表名称, 如保持默认名称, 单击【完成】 按钮, 如图所示。

Step 10 返回【获取外部数据 -Excel 电子表格】 对话框,选中【保存导入步骤】 复选框,在【另存为】文本框中输入名称,单击【保存导入】 按钮, 如图所示。

Step 11 操作完成后, 即可导入选择的Excel 电子表格, 并在数据库中创建一个新表, 如图所示。

3.从文本文件导入

在工作中, 需要使用文本文件导出的数据很多, 如考勤文件、 企业到企业(B2B) 的数据传输等。 如果有需要, 也可以将这些文本文件导入Access数据库中, 具体操作步骤如下。

Step 01 打开"销售管理数据 .accdb",单击【外部数据】 选项卡【导入并链接】 组中的【新数据源】 下拉按钮,在弹出的下拉菜单中选择【从文件】选项,在弹出的级联菜单中选择【文本文件】 选项, 如图所示。

Step 02 打开【获取外部数据 - 文本文件】 对话框, 单击【文件名】 文本框右侧的【浏览】按钮, 如图所示。

Step 03 打开【打开】 对话框,选择要导入的文本文件,单击【打开】按钮, 如图所示。

Step 04 返回【获取外部数据 - 文本文件】 对话框,选中【将源数据导入当前数据库的新表中】单选按钮,单击【确定】 按钮, 如图所示。

Step 05 打开【导入文本向导】 对话框,选中【带分隔符】 单选按钮,单击【下一步】 按钮, 如图所示。

技能拓展—导入固定宽度的文本文件

如果文本文件是使用固定宽度分隔开, 可以选中【固定宽度】单选按钮,系统会根据宽度创建分隔线。 用户也可以对分隔线执行添加、移动等操作,如图所示。

Step 06 在【导入文本向导】 对话框中的【请选择字段分隔符】 栏选中【逗号】 单选按钮, 选中【第一行包含字段名称】复选框,单击【下一步】 按钮, 如图所示。

Step 07 在【导入文本向导】 对话框中的【字段选项】 栏设置各字段的名称和数据类型, 单击【下一步】按钮, 如图所示。

Step 08 在【导入文本向导】 对话框中,选中【让 Access 添加主键】 单选按钮,单击【下一步】 按钮, 如图所示。

Step 09 在【导入文本向导】 对话框中的【导入到表】 文本框中输入文件名,单击【完成】 按钮, 如图所示。

Step 10 返回【获取外部数据 - 文本文件】 对话框, 直接单击【关闭】 按钮,如图所示。

Step 11 操作完成后, 即可导入选择的文本文件, 并在数据库中创建一个新表, 如图所示。

台拖一个Gridview,在拖一个导出excel的按钮,给这个按钮添加事件
后台代码:

using BLL;
using Model;

namespace Web
{
    public partial class ExcelOperate : System.Web.UI.Page
    {
        private StudentBLL bll = new StudentBLL();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Bind();
            }
        }

        //绑定数据
        private void Bind()
        {
            GridView1.DataSource = bll.GetAllStu(null);
            GridView1.DataBind();
        }
        #region 导出到excel

        //导出excel
        protected void btnExcelout_Click(object sender, EventArgs e)
        {
            string style = @"<style> .text { mso-number-format:\@; } </script> "; //设置格式
            Response.ClearContent();
            Response.ContentEncoding = Encoding.GetEncoding("gbk");
            Response.AddHeader("content-disposition", "attachment;filename=ouput.xls");
            Response.ContentType = "application/excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            GridView1.RenderControl(htw);
            Response.Write(style);//注意
            Response.Write(sw.ToString());
            Response.End();
        }
        //注意:必须覆盖此方法
        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }
        //解决数字字符串显示不完全
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            // e.Row.Cells[3].Attributes.Add("class", "text");//在数据绑定中设置格式
            //哪一列需要显示文本的,加上下面这句话即可
            e.Row.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
        } 
        #endregion
    }
}

页面效果:


导入Excel并保存到数据库:
前台需要拖一个FileUpload上传控件,一个导入excel按钮,给其添加事件:

//导入excel数据
        protected void btnExcelIn_Click(object sender, EventArgs e)
        {
            string filepath = string.Empty;
            string getErrormg = string.Empty;
            DataTable dt=new DataTable();
            if (!fuFile.HasFile)
            {
                Response.Write("<script>alert('请选择你要导入的Excel文件');</script>");
                return;
            }
            //获取文件的后缀名
            string fileExt = System.IO.Path.GetExtension(fuFile.FileName);
            if (fileExt != ".xls")
            {
                Response.Write("<script>alert('文件类型错误!');</script>");
                return;
            }
            //获取绝对路径
            filepath = fuFile.PostedFile.FileName;
            string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";Data Source=" + filepath;
            OleDbConnection excelCon = new OleDbConnection(conn);
            //Excel文件里面工作表名 默认为Sheet1,后面需要加上$符号[工作表名称$]切记,不然会报错
            OleDbDataAdapter odda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", excelCon);
            try
            {
                odda.Fill(dt);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                Response.Write("<script>alert('" + ex.Message + "!')</script>");
            }
            finally
            {
                excelCon.Close();
                excelCon.Dispose();
            }
            //将数据写到数据库里面
            try
            {
              
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Studnet stu=new Studnet();
                    stu.C_id = Convert.ToInt32(dt.Rows[i]["c_id"]);
                    stu.No = dt.Rows[i]["no"].ToString();
                    stu.Name = dt.Rows[i]["name"].ToString();
                    stu.Gender = dt.Rows[i]["gender"].ToString() == "男" ? true : false;
                    stu.Age = Convert.ToInt32(dt.Rows[i]["age"].ToString());
                    bll.InsertStu(stu);
                }

            }
            catch (Exception ex)
            {

                getErrormg = ex.Message;
                Response.Write(ex.Message);
            }

            if (getErrormg == "")
            {
                Response.Write("<script>alert('导入Excel文件成功!')</script>");
                Bind();
            }
            else { Response.Write("<script>alert('导入Excel文件失败!')</script>"); }

        }

Excel和导入后的页面效果:




数据库在导入excel数据之前和时候的效果:



这里要注意几个地方,一般导出excel的时候,数字文本会把前面的0都省略掉了,这里需要注意:红色代码片段,导入的时候,也有个***红红红色***标记码块要注意
以下是前台完整代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExcelOperate.aspx.cs" Inherits="Web.ExcelOperate" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"></asp:GridView>
        <br />
        <asp:Button ID="btnExcelout" runat="server" OnClick="btnExcelout_Click" Text="导出到Excel" />
        <br />
        <asp:FileUpload ID="fuFile" runat="server" />
        <asp:Button ID="btnExcelIn" runat="server" OnClick="btnExcelIn_Click" Text="导入Excel数据" />
    </div>
    </form>
</body>
</html>

以下是后台完整代码:

ython可以使用各种各样的文件作为数据源:

  • flat files — csv, txt, tsv etc.
  • pickled files
  • excel spreadsheets
  • SAS and Stata files
  • HDF5
  • MATLAB
  • SQL databases
  • web pages
  • API

Flat files

平面文件--txt,csv - 很简单,可以使用numpy或pandas导入。

numpy.recfromcsv - 加载存储在逗号分隔文件中的ASCII数据。返回的数组是一个记录数组(如果usemask = False)或masked记录数组(如果usemask = True)。Python示例代码:

data = np.recfromcsv(file)

numpy.loadtxt - 此函数旨在成为简单格式化文件的快速阅读器。该genfromtxt函数提供了更复杂的处理,例如,缺失值的行。

data = np.loadtxt('file.csv', delimiter=',', skiprows=1, usecols=[0,2])

numpy.genfromtxt - 从文本文件加载数据,并按指定处理缺失值。是更复杂的函数,有很多参数来控制你的导入。

data = np.genfromtxt('titanic.csv', delimiter=',', names=True, dtype=None)

使用pandas更容易 - 一行,你准备好DataFrame中的文件。还支持可选地将文件迭代或分解为块。

data = pd.read_csv(file, nrows=5, header=None, sep='\t', comment='#', na_values='Nothing')

Pickle

它用于序列化和反序列化Python对象结构。可以对python中的任何对象进行pickle,以便将其保存在磁盘上。pickle的作用是在将对象写入文件之前先将其“序列化”。Pickling是一种将python对象(list,dict等)转换为字符流的方法。这个想法是这个字符流包含在另一个python脚本中重建对象所需的所有信息。下面的代码将打印一个在某处创建并存储在文件中的字典 - 非常酷,不是吗?

import pickle 
with open('data.pkl', 'rb') as file: 
 d = pickle.load(file)
print(d)

Excel

与pandas.read_excel将Excel表读入panda DataFrame中,并进行了大量的自定义导入数据,这个函数的文档很清楚,你可以用Excel文件做任何你想做的事情。

df = pd.read_excel('file.xlsx', sheet_name='sheet1')

SAS和Stata

SAS代表统计分析软件。SAS数据集包含组织为观察(行)和变量(列)表的数据值。要打开此类文件并从中导入数据,请看下面的Python代码示例:

from sas7bdat import SAS7BDAT
with SAS7BDAT('some_data.sas7bdat') as file: 
 df_sas = file.to_data_frame()

Stata是一款强大的统计软件,可以让用户分析、管理和生成数据的图形化可视化。它主要被经济学、生物医学和政治学领域的研究人员用于研究数据模式。存储在.dta文件中的数据,导入它的最好方法是pandas.read_stata

df = pd.read_stata('file.dta')

HDF5

分层数据格式(HDF)是一组文件格式(HDF4, HDF5),用于存储和组织大量数据。HDF5是一个独特的技术套件,可以管理非常大和复杂的数据集合。HDF5简化了文件结构,只包含两种主要类型的对象:

  • Datasets,是同构类型的多维数组
  • Groups,它是可以容纳数据集和其他组的容器结构

这就产生了一种真正的层次化、文件系统式的数据格式。实际上,HDF5文件中的资源甚至可以使用类似/ path / to / resource访问HDF5文件中的资源。元数据以用户定义的、附加到Groups和Datasets的命名属性的形式存储。然后,可以使用数据集、组和属性构建表示图像和表的更复杂的存储api。

要导入HDF5文件,我们需要h5py库。下面的Python代码示例使我更轻松,完全可以理解。

import h5py 
# Load file: 
data = h5py.File('file.hdf5', 'r') 
# Print the keys of the file 
for key in data.keys(): 
 print(key)
# Now when we know the keys we can get the HDF5 group
group = data['group_name'] 
# Going one level deeper, check out keys of group 
for key in group.keys(): 
 print(key)
# And so on and so on

MATLAB

很多人使用MATLAB并将数据存储在.mat文件中。那些文件是什么?这些文件包含在MATLAB工作空间中分配给它们的变量和对象列表。将它作为字典导入Python并不奇怪,其中键是MATLAB变量和值 - 分配给这些变量的对象。要编写和读取MATLAB文件,请使用scipy.io包。

import scipy.io 
mat = scipy.io.loadmat('some_project.mat')
print(mat.keys())

关系数据库

使用驱动程序连接到数据库,我们可以直接从那里获取数据。通常它意味着:创建连接,连接,运行查询,获取数据,关闭连接。它可以一步一步地完成,但在pandas 中只需要sqlalchemy包创建的连接。下面是连接到sqlite数据库引擎并从中获取数据的示例:

from sqlalchemy import create_engine 
import pandas as pd 
# Create engine 
engine = create_engine('sqlite:///localdb.sqlite')
# Execute query and store records in DataFrame 
df = pd.read_sql_query("select * from table", engine)

来自Web的数据

首先,如果我们有一个文件的URL,我们可以使用标准的pandas.read_csv / pandas.read_excel函数在参数“file =”中指定它

df = pd.read_csv('https://www.example.com/data.csv', sep=';')

除此之外,要从Web获取数据,我们需要使用HTTP协议,特别是GET方法。并且requests 包做了这个令人难以置信的工作。要从requests.get收到的响应中访问文本,我们只需要使用方法.text。

import requests 
r = requests.get('http://www.example.com/some_html_page') 
print(r.text)

r.text将为我们提供一个包含所有html标签的网页 - 不是很有用,不是吗?我们有一个BeautifulSoup包,可以解析HTML并提取我们需要的信息,在本例中是所有超链接(继续前面的例子):

from bs4 import BeautifulSoup
html_doc = r.text 
# Create a BeautifulSoup object from the HTML 
soup = BeautifulSoup(html_doc)
# Find all 'a' tags (which define hyperlinks) 
a_tags = soup.find_all('a') 
# Print the URLs to the shell 
for link in a_tags: 
 print(link.get('href'))

API

在计算机编程中,应用程序编程接口(API)是一组子例程定义,通信协议和用于构建软件的工具。一般而言,它是一组明确定义的各种组件之间的通信方法。有许多不同的API,首先必须做的是检查文档,但事实是几乎所有API都以JSON格式返回数据。requests 包将再次帮助我们。(我们必须发送HTTP GET请求以从API获取数据)。

import requests 
r = requests.get('https://www.example.com/some_endpoint') 
# Decode the JSON data into a dictionary: 
json_data = r.json()
# Print each key-value pair in json_data 
for k in json_data.keys(): 
 print(k + ': ', json_data[k])

我们可以看到,数据无处不在,我们必须知道获取它的所有方法