将Exce表中的数据导入到数据库中
我们程序员有些时候会有将客户表中的数据导入到项目的表中的需求,用来做数据基础,那么就要一些小技巧,本文就做过的一些实例出发谈一谈。
-
首先页面上的按钮
<td >
<input id="Fileexcle" type="file" runat="server" class="fileword" />
<asp:Button ID="fileUpload" runat="server" Text="导入数据" OnClick="fileUpload_Click"/>请选择Excle文件上传,注意格式(.xls/.xlsx)</td>
创建一个按钮,申明只识别的文件格式
-
后天页面
以上按钮为例:
创建onclick事件:
protected void fileUpload_Click(object sender, EventArgs e)
{
if (Fileexcle.PostedFile.FileName == "")//获取文件名称
{
JscriptPrint("请选择要上传的Excel文件!", "list.aspx", "Error");
return;
}
string fileName = Fileexcle.PostedFile.FileName;
int extendNameIndex = fileName.LastIndexOf(".");
string extendName = fileName.Substring(extendNameIndex);
//验证是否为Exel格式
if (extendName.ToLower() == ".xls" || extendName.ToLower() == ".xlsx")
{
result = upload(Fileexcle);//upload方法是获取文件路径的
if (result.Length != 0)
{
InsertData();//将Excel表中的数据导入到表中方法
DateBind();
}
else
{
JscriptPrint("上传失败!", "ImportTest.aspx", "Error");
}
}
else
{
JscriptPrint("请选择正确的Excel文件(.xls/.xlsx)!", "ImportTest.aspx", "Error");
return;
}
}
Upload方法
/// <summary>
/// 获取上传文件路径
/// </summary>
/// <param name="uploadFiles">上传文件的控件名称</param>
/// <returns>返回路径</returns>
public string upload(System.Web.UI.HtmlControls.HtmlInputFile uploadFiles)
{
string fileName = uploadFiles.PostedFile.FileName;
int extendNameIndex = fileName.LastIndexOf(".");
string extendName = fileName.Substring(extendNameIndex + 1);
string newName = DateTime.Now.ToString("yyyyMMddHHmmss");
string path = "0";
try
{
newName += uploadFiles.PostedFile.ContentLength.ToString();
path = System.Web.HttpContext.Current.Server.MapPath("~/upload/excel/");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
path += "¥¥" + newName + "." + extendName;
uploadFiles.PostedFile.SaveAs(path);
}
catch
{
return "0";
}
return path;
}
InsertData方法
private void InsertData()
{
list = getList();//首先获取数据源
if (list.Count() > 0)
{
int i = 0, j = 0;
using (Entities db = new Entities())
{
string s = "";
foreach (var li in list)//遍历集合
{
S_ServiceFee donate = new S_ServiceFee();
donate.SDepartMent = li.SDepartMent;
donate.SName = li.SName;
donate.SEducation = li.SEducation;
donate.Station = li.Station;
db.S_ServiceFee.Add(donate);
i += 1;
j += 1;
db.SaveChanges();
}
s += "本次成功导入" + i + "条数据,总条数为:" + list.Count();
JscriptPrint(s + "操作成功!", "ImportTest.aspx", "Success");
}
}
}
getList()方法
protected List<data> getList()
{
List<data> list = new List<data>();//申明集合数据类型
Cells cells;
Workbook workbook = new Workbook();
try
{
workbook.Open(result);
}
catch (ArgumentOutOfRangeException ex)
{
// Response.Write(ex.ToString());
}
cells = workbook.Worksheets[0].Cells;
PropertyInfo[] ps = typeof(data).GetProperties();
if (cells.MaxDataColumn + 1 < ps.Count() - 2)
{
JscriptPrint("模板读取有误" + "实际字段数为:" + (cells.MaxDataColumn + 1) + ",正确字段数应为:" + (ps.Count() - 2), "", "Error");
return list;
}
string s = "";
for (int i = 1; i < cells.MaxDataRow + 1; i += 1)//表中的行数,从第二行开始,考虑到第一行是表头数据
{
data d = new data();
d.sort = i + 1;
for (int j = 0; j < cells.MaxDataColumn + 1; j += 1)//表中的列数
{
s = cells[i, j].StringValue.Trim();//获取列行对应的数据
//一行行的读取数据,插入数据库的代码也可以在这里写
switch (j)
{
case 0:
d.SDepartMent = s;//表示导入表中的第二行第一列中的数据
break;
case 1:
d.SName = s;
break;
case 2:
d.SEducation = s;
break;
case 3:
d.Station = s;
break;
case 4:
d.PayStation = s;
break;
case 5:
d.PayFuD = s;
Break;
default:
break;
}
}
list.Add(d);
}
return list;
}
上面data类
public class data
{
public string SId { get; set; }
public string SDepartMent { get; set; }
public string SName { get; set; }
public string SEducation { get; set; }
public string JiDJx { get; set; }
public int sort { get; set; }
}
-
总结
总体思想:首先数据源获取(要导入的表格数据),再将它读取并存储到临时的集合中,最后遍历集合,将它付给你new的新对象保存。
本人初级程序员,如有错误,请指出,再者有更高明的做法,欢迎讨论。