Xml:
基本的存入节点:
//我们存入节点
XElement root = new XElement("root");
//我们把shop当成root的子节点
XElement shop = new XElement("shop");
root.Add(shop);
//往books添加子节点,并给books来一个自定义属性bid,还给子节点添加内容
XElement books = new XElement("books");
books.SetAttributeValue("bid", bid);
books.Add(new XElement("bookname") { Value = _bookname });
books.Add(new XElement("price") { Value = _price });
SetAttributeValue()是存入属性
Attribute()取出属性值
我们linq to xml
XElement xel = root.Element("shop").Elements("books").Where(a => a.Attribute("bid").Value == uid).First();
我们execle微软自带导入我们的表:
string url = Server.MapPath("~/execl/students.xls");
//我们链接数据库的链接字符串 IMEX=1的作用是转换类型 8为标准
string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"ExtendedProperties=\"Excel 8.0;HDR=YES;IMEX=1;\";Data Source=" + url;
OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();
string sql="select * from[Sheet1$]"; //[Sheet1$]这个在微软自带中$不能少
OleDbCommand com = new OleDbCommand(sql,conn);
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(com);
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
Response.Write(dt.Rows[i][0] + ":" + dt.Rows[i][1] + ":" + dt.Rows[i][2] + "<br/>");
}
conn.Close();
我们npoi导入导出
我们需要引入我们的第三方插件:
using NPOI.HSSF.UserModel;
这里我们用文件流来导入就容易多了
我们的思路是:
读取整表,根据表读取我们其中的一个表,然后读取我们的行,在读取我们的列就ok
我们读取列的话那里有数据类型的问题,我们要进行我们的数据类型转换
这里我们封装了一个neixing方法需要一个参数,列,返回一个object类型数据
最后我们别忘记了关闭了我们的文件流,不然会卡机的,后台一直运行报错
string url = newpath;
FileStream fs = new FileStream(url, FileMode.Open);
//读取整个execl表
HSSFWorkbook workbook = new HSSFWorkbook(fs);
//读取里面的一个表
HSSFSheet sheet = workbook.GetSheet("Sheet1") as HSSFSheet;
stEntities st = new stEntities();
//我们天加到数据库中
for (int i = 1; i < sheet.LastRowNum+1; i++)
注:我们这里LastRowNum+1是因为我们不加的话读取的数据会少一条
{
stuends sds = new stuends();
//读取行
HSSFRow row = sheet.GetRow(i) as HSSFRow;
//读取列
sds.xuehao = neixing(row.GetCell(0)).ToString();
sds.name = neixing(row.GetCell(1)).ToString();
sds.xue_price = Convert.ToDouble(neixing(row.GetCell(2)));
st.stuends.Add(sds);
}
num = st.SaveChanges();
//关闭文件流
fs.Close();
public object neixing(NPOI.SS.UserModel.Cell GetCell)
{
object st = "";
if (GetCell.CellType == NPOI.SS.UserModel.CellType.STRING)
{
st = GetCell.StringCellValue;
}
if (GetCell.CellType == NPOI.SS.UserModel.CellType.NUMERIC)
{
st = GetCell.NumericCellValue;
}
return st;
}
我们导出execl
必须要:Response.AddHeader("Content-Disposition", "attachment;filename=表名.xls");
思路:和读取思路差不多 我们要先把表建好 然后把数据给填入
这里我们就是先建一个完整的表
然后单独的表
建表头,也就是我们 的第一行
我的理解:好像jq一样根据父级标签去找然后进行一系列操作
网页下载:内存流
MemoryStream ms = new MemoryStream();
workbook.Write(ms); //把表写入我们的内存流中去, 就可以下载
Response.BinaryWrite(ms.ToArray());
stEntities st = new stEntities();
//查询数据库得到我们所有的数据
List<stuends> slist = st.stuends.ToList();
//我们建整个表
HSSFWorkbook workbook = new HSSFWorkbook();
//建一个单独的表
HSSFSheet sheet = workbook.CreateSheet("2017芙蓉中学学生成绩表") as HSSFSheet;
HSSFRow row = sheet.CreateRow(0) as HSSFRow;
//开始建表头
row.CreateCell(0).SetCellValue("编号");
row.CreateCell(1).SetCellValue("学号");
row.CreateCell(2).SetCellValue("姓名");
row.CreateCell(3).SetCellValue("学费");
for (int i = 1; i < slist.Count; i++)
{
HSSFRow row1 = sheet.CreateRow(i) as HSSFRow;
row1.CreateCell(0).SetCellValue(slist[i - 1].id);
row1.CreateCell(1).SetCellValue(slist[i - 1].xuehao);
row1.CreateCell(2).SetCellValue(slist[i - 1].name);
row1.CreateCell(3).SetCellValue(Convert.ToDouble(slist[i - 1].xue_price));
}
//文件名字
Response.AddHeader("Content-Disposition", "attachment;filename=2017学生成绩报表.xls");
//内存流 一定要不然下不了
MemoryStream ms = new MemoryStream();
workbook.Write(ms); //把表写入我们的内存流中去, 就可以下载
Response.BinaryWrite(ms.ToArray());
表中的一些样式操作
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.CreateSheet("2017") as HSSFSheet;
HSSFRow row = sheet.CreateRow(0) as HSSFRow;
row.Height = 1000;
var cell = row.CreateCell(0);
cell.SetCellValue("中华有为科技有限公司 \n qq:2860889218 \n 电话:13271945071");
//创建列的样式
HSSFCellStyle hfstyle = workbook.CreateCellStyle() as HSSFCellStyle;
//设置垂直居中
hfstyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
hfstyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
hfstyle.FillBackgroundColor=HSSFColor.GREEN.index;
//自动换行
hfstyle.WrapText = true;
//生成一个字体
HSSFFont font = workbook.CreateFont() as HSSFFont;
font.Color = HSSFColor.RED.index;
font.FontHeight = 200;
font.FontName = "微软雅黑";
//应用我们设置好的字体
hfstyle.SetFont(font);
cell.CellStyle = hfstyle; //把样式写入我们的单元中
//合并单元格
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 4));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 3, 0, 0));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 3, 1, 1));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 3, 2, 2));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 1, 3, 6));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 3, 3, 3));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 3, 4, 4));
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 5, 6));
sheet.CreateRow(1).CreateCell(0).SetCellValue("营业部");
sheet.GetRow(1).CreateCell(1).SetCellValue("当日预收");
sheet.GetRow(1).CreateCell(2).SetCellValue("昨日预收");
sheet.GetRow(1).CreateCell(3).SetCellValue("8月关键经营指标");
sheet.CreateRow(2).CreateCell(3).SetCellValue("在职人数");
sheet.GetRow(2).CreateCell(4).SetCellValue("新增人数");
sheet.GetRow(2).CreateCell(5).SetCellValue("以实际销售为主");
sheet.CreateRow(3).CreateCell(5).SetCellValue("出单人力");
sheet.GetRow(3).CreateCell(6).SetCellValue("出单数");
这里我们要注意CreateRow和GetRow的使用,一个是创建,一个是找到
如果我们都用了CreateRow就会覆盖住
这里我们关于我们的文件上传的问题:
<form action="/homeworker/Index1" method="post" runat="server" id="form1" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="导入" />
<hr />
</form>
我们表单提交一定要加上类型enctype="multipart/form-data" 这个我们才能上传文件
<input type="file" name="file" /> 这里我们也要name
我们后台就用我们的resquest.files来接受