標籤:style http color 使用 資料 os
這兩天項目上用Aspose匯出Excel來著。開始感覺挺簡單的,但是實際操作起來還是挺複雜的,調試占的時間很長。主要是動態產生列、合併儲存格、調樣式佔了很長時間,還是總結一下吧。
基礎操作:
//EXCEL模板路徑
var filePath = HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.CurrentPackage.Settings["FilePath"]);
//開啟模板sheet
var book = new Workbook();
book.Open(filePath);
var sheet = book.Worksheets[0];
//根據需要給儲存格賦值,Excel行列的索引都是從0開始的。
sheet.Cells[i,j].PutValue("**");
動態產生列:
根據模板情況訪問資料庫得到DataTable,盡量得到和Excel布局相近的資料記錄。迴圈寫儲存格,合并需要合并的儲存格,設定樣式。
合併儲存格:
//合并標題列,因為列是動態添加的,所以標題置中顯示,得重新根據列寬合併儲存格
Range rangeTitle = sheet.Cells.CreateRange(firstRow, firstColumn, totalRows, totalColumns);//建立需要合并的Range範圍再進行合并
//rangeTitle.UnMerge(); //如果這個範圍中本來n個儲存格已經是合并過的,需要取消合并再Merge,否則會報錯。
rangeTitle.Merge(); //合并range
樣式:
int styleIndex = book.Styles.Add(); //在當前樣式集合中建立一個樣式,返回建立樣式索引,設定樣式必須在原有樣式集合中再添加一個樣式,否則會覆蓋原樣式
Style style = book.Styles[styleIndex];
style.RotationAngle = 255; //這個角度值研究了半天,可以把漢字從左至右顯示,改成從上到下,垂直顯示。可以試一下。
Range range = sheet.Cells.CreateRange(startRowIndex - catalogNameRowSpan + 1, 0, catalogNameRowSpan, 1); //得到要使用樣式的範圍
range.SetStyle(style); //設定樣式
//根據原有樣式,拷貝樣式
Range rangeRows = sheet.Cells.CreateRange(firstRow, firstColumn, totalRows, totalColumns);//要賦樣式的範圍
rangeRows.CopyStyle(sheet.Cells.CreateRange(4, 1, 1, 6)); //把(4, 1, 1, 6)的樣式賦到rangeRows範圍上。
//應用樣式(給儲存格加邊框,每個邊的框寬度根據多次設定樣式的最大粗細為準)
Style GridStyle = book.Styles[book.Styles.Add()];
GridStyle.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Medium; //設定上邊框粗細
GridStyle.Borders[BorderType.TopBorder].Color = Color.Black; //設定邊框顏色
GridStyle.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Medium;//設定下邊框粗細
GridStyle.Borders[BorderType.BottomBorder].Color = Color.Black;
GridStyle.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;//設定左邊框粗細
GridStyle.Borders[BorderType.LeftBorder].Color = Color.Black;
GridStyle.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Medium;//設定右邊框粗細
GridStyle.Borders[BorderType.RightBorder].Color = Color.Black;
GridStyle.HorizontalAlignment = TextAlignmentType.Center;//文本置中對齊
GridStyle.Font.Size = 9; //設定字型9號
Range range1 = sheet.Cells.CreateRange(4, 0, 1, 6 + totalColumns); //樣式應用範圍
StyleFlag borderStyle = new StyleFlag(); //標示集合,啟用哪個樣式
borderStyle.Borders = true; //啟用Borders樣式
borderStyle.HorizontalAlignment = true; //啟用水平對齊樣式
borderStyle.Font = false;//不使用配置的字型樣式
range1.ApplyStyle(GridStyle, borderStyle); //應用多種樣式。borders設定:由於LeftBorder設定CellBorderType.Thin,範圍是單行多列多儲存格的,所以每個儲存格左邊框被設定兩次,按最粗的樣式顯示,第一個儲存格左框是Thin,其他列的儲存格左框是Medium。