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來接受