學習文檔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來接受

 

 

 

發佈了33 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章