学习文档XML,对execl操作

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("出单数");

 

          这里我们要注意CreateRowGetRow的使用,一个是创建,一个是找到

            如果我们都用了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来接受

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值