C#上传excel文档,设定好固定的格式内容,将内容字段插入数据库中,怎么实现

dreamisfling 2014-01-11 09:54:43
C#上传excel文档,设定好固定的格式内容,将内容字段插入数据库中,怎么实现,例如表头楼号、单元号、房间号。上传exce表并将对应的字段插入已经设定好的3个表中,例如tb_building、tb_unit、tb_room表中的每个相应的字段
...全文
411 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamisfling 2014-01-13
  • 打赏
  • 举报
回复
方法这么多啊,哈哈,谢谢各位了。
joyhen 2014-01-12
  • 打赏
  • 举报
回复
需要用第三方的组件,针对excel2003和2007的不同版本读取里面的内。读取有分成2种模式,一种原生excel,一种是html个是的excel(右键excel用txt文件打开,会显示标准html或table格式的excel呈现编码组成。第一种通过组件直接读取就行,第二种需要先读取html文本,然后用正则去匹配你需要的字段,然后构建对象写入到数据库。 组件dll:KinnSoft.Excel.OfficeOpenXml.dll
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
c#操作excel跟vba一样非常简单方便。 这里要注意的是,如何“用一句话”把数据读取到二维数组中,以及“用一句话”把二维数组写入单元格。 要将二维数组转换为强类型的对象集合,或者转换为 DataTable,你可以自己写一个通用的方法。就好像 SqlHelper 一样,是非常通用的。我就不写了,希望你自己写出来。 至于什么“读写数据库”,其实你把上述内容先搞清楚,那些数据库操作就不用纠结了。
  • 打赏
  • 举报
回复
嗯,这里首先假设已经设置了别名:
using excel = Microsoft.Office.Interop.Excel;
要注意,当你在csdn上看到c#操作excel工作簿的代码时,大多数都存在选择方法不当的问题。那会造成你的程序慢几十倍。
  • 打赏
  • 举报
回复
c#操作excel跟vba一样非常简单方便。 这里要注意的是,如何“用一句话”把数据读取到二维数组中,以及“用一句话”把二维数组写入单元格。 要将二维数组转换为强类型的对象集合,或者转换为 DataTable,你可以自己写一个通用的方法。就好像 SqlHelper 一样,是非常通用的。我就不写了,希望你自己写出来。 至于什么“读写数据库”,其实你把上述内容先搞清楚,那些数据库操作就不用纠结了。
  • 打赏
  • 举报
回复
引用 楼主 dreamisfling 的回复:
C#上传excel文档,设定好固定的格式内容,将内容字段插入数据库中,怎么实现,例如表头楼号、单元号、房间号。上传exce表并将对应的字段插入已经设定好的3个表中,例如tb_building、tb_unit、tb_room表中的每个相应的字段
这要看你所谓的“内容字段”是指什么。 读些excel工作表中的数据,可以这样
var app = new excel.Application();
var wk = app.Workbooks.Open(path);
var sh = wk.Worksheets["Sheet3"];
var datas = sh.Range["C5:F14"].Value2;
var target = sh.Range["G10:K19"];
target.ClearContents();
target.Cells[1,0].values = "下面行是复制内容:";
target.Offset[1].Resize[datas.GetLength(0), datas.GetLength(1)].Value2 = datas;
app.DisplayAlerts = false;
wk.Close();
app.Quit();
这里我把一个范围内的所有数据读取到一个 object[,] 二维数组 datas 中,然后在 target 区域中显示(第一行写了标题,然后下一行开始写入二维数组)。 你会发现,非常简单方面。 有些人一个单元格一个单元格地去操作,那样的程序就会非常非常慢慢。
yixian2007 2014-01-11
  • 打赏
  • 举报
回复
下边是回调函数,判断是否是控件回发的函数。

protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            //回调函数,只调用了btnQuery的回调
            string controlName = Request.Params.Get("__EVENTTARGET");
            string eventArgument = Request.Params.Get("__EVENTARGUMENT");
            if (controlName == btnQuery.ClientID.ToString() && eventArgument.Trim() != string.Empty)
            {
                LeadXLS(eventArgument);
                BindData();
            }
        }
        if (!Page.IsPostBack)
        {
            BindEntryYear();
            BindData();
        }
    }
下边是实际导入的函数

protected void LeadXLS(string guid)
    {
        string phyAddress = MapPath("~/Upload/") + guid + ".xls";
        if (System.IO.File.Exists(phyAddress))
        {
            IList<string> tableList = ExcelHelper.GetExcelTablesName(phyAddress);
            if (tableList.Count > 0)
            {
                DataTable dt = ExcelHelper.GetExcelDataTable(phyAddress, tableList[0].ToString());
                if (ValidColumns(dt))
                {
                    ExcelHelper.ResetColumnTypeByString(dt, dt.Columns[0].ColumnName);
                    ExcelHelper.ResetColumnTypeByString(dt, dt.Columns[1].ColumnName);
                    Save(dt);
                    
                }
                else
                {
                    BSUtility.WindowAlert(Page, "alert('列名有误!请查看标准格式!')");
                }
            }
            else
            {
                BSUtility.WindowAlert(Page, "alert('不是有效的EXCEL文件,请检查!')");
            }
            //不管成功与否皆删除该EXCEL文件
            System.IO.File.Delete(phyAddress);
        }
        else
            BSUtility.WindowAlert(Page, "alert('不是有效的EXCEL文件,请检查!')");
    }
    //验证是否符合格式
    private bool ValidColumns(DataTable dtTemp)
    {
        if (dtTemp.Columns.Count < 3)
        {
            return false;
        }
        else
        {
            if (dtTemp.Columns[0].ColumnName.ToUpper() == "KSH" &&
               dtTemp.Columns[1].ColumnName.ToUpper() == "ZKZH" &&
                dtTemp.Columns[2].ColumnName.ToUpper() == "XM")
            {
                return true;
            }
            else
                return false;
        }
    }

    private void Save(DataTable dtTemp)
    {
        r_EntryYear entryYear = new r_EntryYear();
        string entryYearString = entryYear.GetCurrentEntryYear().EntryYear;
        e_Result result = new e_Result();
        StringBuilder sb = new StringBuilder();
        foreach (DataRow dr in dtTemp.Rows)
        {
            e_ResultEntity insertEntity = new e_ResultEntity();
            insertEntity.EntryYear = entryYearString;
            insertEntity.BMH = dr[0].ToString();
            insertEntity.ZKZH = dr[1].ToString();
            insertEntity.XM = dr[2].ToString();
            if (!result.ExamResultInsert(insertEntity))
                sb.Append(insertEntity.XM + ",");
        }
        if (sb.Length > 0)
        {
            BSUtility.WindowAlert(Page, "alert('导入过程中出现错误,请检查下列考生:" + sb.ToString() + "');");
        }
        else
            BSUtility.WindowAlert(Page, "alert('导入成功!')");
    }

yixian2007 2014-01-11
  • 打赏
  • 举报
回复
下边的代码是使用控件上传文件的语言,控件使用的是uploadify控件。 注意其中重要的是__doPostBack("<%=btnQuery.ClientID %>", guid);这是调查用后台程序的入口

<script language="javascript" type="text/javascript">
        $(function () {
            var guid = '<%=Request["guid"] %>';
            var type = '<%=Request["type"] %>';
            if (guid == null || guid == "") {
                guid = newGuid();
            }
            if (type != null) {
                type = type + '/';
            }
            $('#file_upload').uploadify({
                'swf': '../Uploadify/uploadify.swf',                        //FLash文件路径
                'buttonText': '选择文件',                        //按钮文本
                'uploader': '../UploadHandler.ashx?guid=' + guid, //处理ASHX页面
                'formData': { 'folder': 'picture' },         //传参数
                'queueID': 'fileQueue',                        //队列的ID
                'queueSizeLimit': 10,                           //队列最多可上传文件数量,默认为999
                'auto': false,                                 //选择文件后是否自动上传,默认为true
                'multi': false,                                 //是否为多选,默认为true
                'removeCompleted': true,                       //是否完成后移除序列,默认为true
                'fileSizeLimit': '20MB',                       //单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值
                'fileTypeDesc': 'xls Files',                 //文件描述
                'fileTypeExts': '*.xls',                        //上传的文件后缀过滤器
                'onQueueComplete': function (event, data) {    //所有队列完成后事件
                            alert("上传成功!下面开始导入!请稍候!");
                            __doPostBack("<%=btnQuery.ClientID %>", guid);
                },
                'onUploadError': function (event, queueId, fileObj, errorObj) {
                    alert(errorObj.type + ":" + errorObj.info);
                }
            });
        });
        function newGuid() {
            var guid = "";
            for (var i = 1; i <= 32; i++) {
                var n = Math.floor(Math.random() * 16.0).toString(16);
                guid += n;
                if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
                    guid += "-";
            }
            return guid;
        }
    </script>

yixian2007 2014-01-11
  • 打赏
  • 举报
回复
第一步:上传文件,你可以使用一些JQUERY控件来实现,上传完后调用后台程序 第二步:后台程序执行导入EXCEL文件到DATATABLE中。 第三步:将DATATABLE一行行地插入数据库中。
zhangzeguang88 2014-01-11
  • 打赏
  • 举报
回复
这个你先通过操作excel的方法获取excel表内的每行数据,然后写个sql语句将每行数据插入到数据库。 在操作excel时建议你用NPOI,这个是开源的,而且不依赖于呆电脑是否安装excel.
wanghui0380 2014-01-11
  • 打赏
  • 举报
回复
额,不多说了,偷个懒你自己google“sql导入导出大全” 你这个就是其中滴 excel 导入到 ms sql那项
epui2008 2014-01-11
  • 打赏
  • 举报
回复
关注,顶你,我也想知道

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧