1. 程式人生 > >Aspose.Cells 首次使用,用到模版填充資料,合併單元格,換行-https://www.cnblogs.com/gylspx/p/5961070.html

Aspose.Cells 首次使用,用到模版填充資料,合併單元格,換行-https://www.cnblogs.com/gylspx/p/5961070.html

Aspose.Cells 首次使用,用到模版填充資料,合併單元格,換行

Aspose.Cells 首次使用,用到模版填充資料,合併單元格,換行

模版格式,圖格式是最簡單的格式,但實際效果不是這種,實際效果圖如圖2

圖2 ,注意看紅色部分,一對一是正常的,但是有一對多的訂單,就得把前面的合併居中,後面對應多行顯示

 

複製程式碼

 var templatePath = Server.MapPath(@"/Template/區域訂單列表匯出模板.xlsx");
             //NPOIHelper.GetTemplateToExcel(templatePath,list);
             Workbook workbook = new Workbook();
             workbook.Open(templatePath);
             Cells cells= workbook.Worksheets[0].Cells;
             if (list != null)
             {
                 int row = 1;//交易單行數  
                 //獲取交易訂單列表
                 foreach (var item in list)
                 { 
                     var startmergepos = row;
                     //// 獲取交易訂單對應的訂單數,做合併行準備
                     var rowsorder = item.OrderList.Count;
                    
                     //合併單元格cells.Merge(1, 0, 3, 1) 引數1代表當前行,引數0代表當前行當前列即第一行第一列,引數3合併的行數,引數4合併的列數
                     cells.Merge(startmergepos, 0, rowsorder, 1);
                     cells[startmergepos, 0].PutValue(item.DealCode);
                     cells[startmergepos, 0].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); //設定單元格合併後垂直居中顯示

                     cells.Merge(startmergepos, 1, rowsorder, 1);
                     cells[startmergepos, 1].PutValue(item.TotalProductMoney.ToString("f2"));
                     cells[startmergepos, 1].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); 

                     cells.Merge(startmergepos, 2, rowsorder, 1);
                     cells[startmergepos, 2].PutValue(item.DeliveryFee.ToString("f2"));
                     cells[startmergepos, 2].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); 

                     cells.Merge(startmergepos, 3, rowsorder, 1);
                     cells[startmergepos, 3].PutValue((item.TotalMoney-item.RealityMoney).ToString("f2"));
                     cells[startmergepos, 3].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); 

                     cells.Merge(startmergepos, 4, rowsorder, 1);
                     cells[startmergepos, 4].PutValue(item.PayMentStr);
                     cells[startmergepos, 4].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); 

                     cells.Merge(startmergepos, 5, rowsorder, 1);
                     cells[startmergepos,5].PutValue(item.PayState==0?"未付款":"已付款");
                     cells[startmergepos, 5].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); 

                     for (int i = 0; i < rowsorder; i++)
                     {
                         cells[row + i, 6].PutValue(item.OrderList[i].OrderId);
                         if (item.OrderList[i].ListOrder_Items!=null&&item.OrderList[i].ListOrder_Items.Count > 0)
                         {
                             cells[row + i, 7].PutValue(item.OrderList[i].ListOrder_Items[0].ProductName);
                             cells[row + i, 8].PutValue(item.OrderList[i].ListOrder_Items[0].SpecHtml);
                             cells[row + i, 8].SetStyle(new Style() {  IsTextWrapped=true});
                             //cells.SetRowHeight(row + i, 200);//設定單元格高度
                             cells[row + i, 9].PutValue(item.OrderList[i].ListOrder_Items[0].Quantity);
                         }
                         else
                         {
                             cells[row + i, 7].PutValue("");
                             cells[row + i, 8].PutValue("");
                             cells[row + i, 9].PutValue("");
                         }
                         cells[row + i, 10].PutValue(item.OrderList[i].TotalMoney);
                         cells[row + i, 11].PutValue(item.OrderList[i].UserName);
                         cells[row + i, 12].PutValue(item.OrderList[i].DepartMentName);
                         cells[row + i, 13].PutValue(item.OrderList[i].CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
                         cells[row + i, 14].PutValue(item.OrderList[i].StateString);
                         if (item.OrderList[i].IsStock == 0)
                         {
                             cells[row + i, 15].PutValue("生產單");
                         }
                         else if (item.OrderList[i].IsStock == 1)
                         {
                             cells[row + i, 15].PutValue("備庫單");
                         }
                         else if (item.OrderList[i].IsStock == 2)
                         {
                             cells[row + i, 15].PutValue("出庫單");
                         }
                      }
            //這是合併單元格後的行數,一定注意,要加上合併的行數,不然會實現不了上圖的效果
                     row = startmergepos + rowsorder; 
                 }
                


             }
             var filename = HttpUtility.UrlEncode("區域訂單列表", System.Text.Encoding.UTF8) +DateTime.Now.ToString("yyyyMMddhhmmss")+ ".xls";
           //轉換成流位元組,輸出瀏覽器下載
             var byti = workbook.SaveToStream().GetBuffer(); 
             ////通知瀏覽器儲存檔案,其實也就是輸出到瀏覽器
             Response.Clear();
             Response.ContentType = "application/octet-stream";
             Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename);
             Response.BinaryWrite(byti);
             Response.Flush();
             Response.Close();

複製程式碼

 一般步驟:

var templatePath = Server.MapPath(@"/Template/區域訂單列表匯出模板.xlsx");
 1、初始化模版
Workbook workbook = new Workbook();
workbook.Open(templatePath);

2、獲取模版的單元
Cells cells= workbook.Worksheets[0].Cells;

3、對不同的行的單元格複製

cells[0, 0].PutValue("我是第一行第一列,也即是第一行第一個單元格");

說一下合併單元格,這個沒捷徑可走,只能提供什麼意思,具體業務具體去合併

//合併單元格cells.Merge(1, 0, 3, 1) 引數1代表當前行,引數0代表當前行當前列即第一行第一列,引數3合併的行數,引數4合併的列數
cells.Merge(1, 0, 3, 1);

設定單元格的樣式

 cells[startmergepos, 1].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); 

設定單元格的高度

//cells.SetRowHeight(row + i, 200);

看一下網上其他例子:

程式碼實現:

大概意思就是模版定義好model對應的名稱,

讀取模版後,把model賦值給模版資料來源,類似dataview,就是欄位對應上

說話一下模版定義變數方式:&=data.ProductName,放在你要填充的單元格內

 

 

這個有必要提一下,怎麼獲取模版實際用到的列數呢,比如你表頭設定了10個欄位,獲取的是10個,而不是整個表格的

cells.MaxDataColumn,這個可以做到