C# WinfForm 控件之dev電子表格 SpreadSheet


網上找了一些資料可是不得入門 只能再回過頭來看demos

看了一點 例子大多繼承自SpreadsheetRibbonTutorialControlBase 這個類,它又繼承自SpreadSheetTutorialControlBase 再往前就不說了

SpreadSheetTutorialControlBase 這個類呢 只是定義了兩個屬性  可能就是運行語言格式的 沒有注釋

SpreadsheetRibbonTutorialControlBase 這個呢又定義了一個屬性 selectPage  看樣是選中的按鈕頁的意思,類型是 RibbonPage 又綁定了兩個方法 一個是單元格值改變 另一個呢是 是最后編輯,我想是這樣的 看名字 (spreadsheetControl1_CellValueChangedOverride、spreadsheetControl1_CellEndEditOverride)這個類就有所有的控件了,這是他的樣子。有個doShow()(大約是顯示的意思)方法 這個應繼承自最基類的dll里先不管什么意思

再看他的子類們

1.AutoFilterModule 打開一個文檔 看注釋

namespace DevExpress.XtraSpreadsheet.Demos {
    public partial class AutoFilterModule : SpreadsheetRibbonTutorialControlBase {
        public AutoFilterModule() {
            InitializeComponent();

            // 這個是en-US 。。。英語的 (漢化的話 在程序入口加 en-Hans 這去百度用法)
            spreadsheetControl1.Options.Culture = DefaultCulture;

            //這個打開路徑下的 auto...xlsx表格 getRelativePath是取程序路徑 可以看到spreadsheetControl1.LoadDocument就是把文檔加到spreadSheetControl中   
            spreadsheetControl1.LoadDocument(DemoUtils.GetRelativePath("AutoFilter_template.xlsx"));
        }

        #region Properties 重載了 選中dataribbonPage1
        protected internal override RibbonPage SelectedRibbonPage { get { return dataRibbonPage1; } }
        #endregion
    }
}
View Code

2。 BreakevenAnalysisModule 定義一個workBook 接收 ssc.document   ssc是spreadSheetControl下同 並加載excel表格 這個有點錯誤 ssc.docment 是取ssc上的sheet的意思

namespace DevExpress.XtraSpreadsheet.Demos {
    public partial class BreakevenAnalysisModule : SpreadsheetRibbonTutorialControlBase {
        public BreakevenAnalysisModule() {
            InitializeComponent();
            InitializeWorkbook();
        }

        #region Properties
        protected internal override RibbonPage SelectedRibbonPage { get { return insertRibbonPage1; } }
        #endregion

        //新建一個空文檔 並加入excel表格  IWorkbook=spreadsheetControl1.Document;
        void InitializeWorkbook() {
            IWorkbook workbook = spreadsheetControl1.Document;
            workbook.LoadDocument(DemoUtils.GetRelativePath("BreakevenAnalysis.xlsx"));
        }
    }
}
View Code

3.CellPropertiesViewerModule

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using DevExpress.DXperience.Demos;
using DevExpress.XtraVerticalGrid.Rows;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraVerticalGrid;
using DevExpress.XtraVerticalGrid.Events;
using DevExpress.Spreadsheet;
using System.Diagnostics;

namespace DevExpress.XtraSpreadsheet.Demos {
    public partial class CellPropertiesViewerModule : SpreadsheetRibbonTutorialControlBase {
        IWorkbook workbook;
        Worksheet sheet;
        Range selectedCell;

        public CellPropertiesViewerModule() {
            InitializeComponent();
            InitializePropertyGrid();
            InitializeWorkbook();

            //清空歷史文檔  spreadsheetControl1.Document.History.Clear()
            this.spreadsheetControl1.Document.History.Clear();
        }

        /// <summary>
        /// 綁定 兩個事件 
        /// </summary>
        protected internal override void SubscribeEvents() {
            base.SubscribeEvents();
            spreadsheetControl1.ContentChanged += spreadsheetControl1_ContentChanged;
            spreadsheetControl1.SelectionChanged += spreadsheetControl1_SelectionChanged;
        }

        //單元格改變是顯示單元格屬性
        void spreadsheetControl1_ContentChanged(object sender, EventArgs e) {
            workbook = spreadsheetControl1.Document;
            sheet = workbook.Worksheets.ActiveWorksheet;//活動頁
            selectedCell = sheet.SelectedCell; //選中的單元格
            propertyGridControl1.SelectedObject = new RangeAdapter(selectedCell);//選中表格的屬性 類在下邊;
        }

        /// <summary>
        /// 不同步的話就同步過來
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void spreadsheetControl1_SelectionChanged(object sender, EventArgs e) {
            workbook = spreadsheetControl1.Document;
            sheet = workbook.Worksheets.ActiveWorksheet;
            if (!sheet.SelectedCell.Equals(selectedCell)) {
                selectedCell = sheet.SelectedCell;
                propertyGridControl1.SelectedObject = new RangeAdapter(selectedCell);
            }
        }

        #region PropertyGrid initialization 初始化屬性表格
        void InitializePropertyGrid() {
            CategoryRow contentCategory = AddCategoryRow(null, "CellContent", "Cell content");//一級 cellContent
            AddEditorRow(contentCategory, "Cell.Formula", "Formula"); // cellcontent的下一級
            AddEditorRow(contentCategory, "Cell.ArrayFormula", "ArrayFormula");

            CategoryRow valueCategory = AddCategoryRow(contentCategory, "Value", "Value");
            AddEditorRow(valueCategory, "Value.TextValue", "TextValue");
            AddEditorRow(valueCategory, "Value.BooleanValue", "BooleanValue");
            AddEditorRow(valueCategory, "Value.NumericValue", "NumericValue");
            AddEditorRow(valueCategory, "Value.ErrorValue", "ErrorValue");
            AddEditorRow(valueCategory, "Value.Type", "Type");

            CategoryRow formattingCategory = AddCategoryRow(null, "Formatting", "Formatting");

            CategoryRow numberFormatCategory = AddCategoryRow(formattingCategory, "NumberFormat", "NumberFormat");
            AddEditorRow(numberFormatCategory, "NumberFormat", "NumberFormat");
            AddEditorRow(numberFormatCategory, "Cell.IsDisplayedAsDateTime", "IsDisplayedAsDateTime");

            CategoryRow alignmentCategory = AddCategoryRow(formattingCategory, "Alignment", "Alignment");
            AddEditorRow(alignmentCategory, "Alignment.Horizontal", "Horizontal");
            AddEditorRow(alignmentCategory, "Alignment.Vertical", "Vertical");
            AddEditorRow(alignmentCategory, "Alignment.Indent", "Indent");
            AddEditorRow(alignmentCategory, "Alignment.WrapText", "WrapText");

            CategoryRow fillCategory = AddCategoryRow(formattingCategory, "Fill", "Fill");
            AddEditorRow(fillCategory, "Fill.BackgroundColor", "Color");

            CategoryRow fontCategory = AddCategoryRow(formattingCategory, "Font", "Font");
            AddEditorRow(fontCategory, "Font.Color", "Color");
            AddEditorRow(fontCategory, "Font.Name", "Name");
            AddEditorRow(fontCategory, "Font.FontStyle", "FontStyle");
            AddEditorRow(fontCategory, "Font.Script", "Script");
            AddEditorRow(fontCategory, "Font.Size", "Size");
            AddEditorRow(fontCategory, "Font.Strikethrough", "Strikethrough");
            AddEditorRow(fontCategory, "Font.UnderlineType", "UnderlineType");

            CategoryRow bordersCategory = AddCategoryRow(formattingCategory, "Borders", "Borders");
            CategoryRow diagBorderCategory = AddCategoryRow(bordersCategory, "DiagonalBorder", "Diagonal");
            AddEditorRow(diagBorderCategory, "Borders.DiagonalBorderColor", "Color");
            AddEditorRow(diagBorderCategory, "Borders.DiagonalBorderLineStyle", "LineStyle");
            AddEditorRow(diagBorderCategory, "Borders.DiagonalBorderType", "Type");

            CategoryRow leftBorderCategory = AddCategoryRow(bordersCategory, "LeftBorder", "Left");
            AddEditorRow(leftBorderCategory, "LeftBorder.Color", "Color");
            AddEditorRow(leftBorderCategory, "LeftBorder.LineStyle", "LineStyle");

            CategoryRow topBorderCategory = AddCategoryRow(bordersCategory, "TopBorder", "Top");
            AddEditorRow(topBorderCategory, "TopBorder.Color", "Color");
            AddEditorRow(topBorderCategory, "TopBorder.LineStyle", "LineStyle");

            CategoryRow rightBorderCategory = AddCategoryRow(bordersCategory, "RightBorder", "Right");
            AddEditorRow(rightBorderCategory, "RightBorder.Color", "Color");
            AddEditorRow(rightBorderCategory, "RightBorder.LineStyle", "LineStyle");

            CategoryRow bottomBorderCategory = AddCategoryRow(bordersCategory, "BottomBorder", "Bottom");
            AddEditorRow(bottomBorderCategory, "BottomBorder.Color", "Color");
            AddEditorRow(bottomBorderCategory, "BottomBorder.LineStyle", "LineStyle");

            CategoryRow styleCategory = AddCategoryRow(formattingCategory, "Style", "Style");
            AddEditorRow(styleCategory, "Style.Name", "Name");

            CategoryRow layoutCategory = AddCategoryRow(null, "Layout", "Layout");
            AddEditorRow(layoutCategory, "Cell.ColumnWidth", "Width");
            AddEditorRow(layoutCategory, "Cell.ColumnWidthInCharacters", "WidthInCharacters");
            AddEditorRow(layoutCategory, "Cell.RowHeight", "Height");

            CategoryRow protectionCategory = AddCategoryRow(null, "Protection", "Protection");
            AddEditorRow(protectionCategory, "Protection.Locked", "Locked");

            bordersCategory.Expanded = false;
        }

        CategoryRow AddCategoryRow(CategoryRow parent, string name, string caption) {
            CategoryRow result = new CategoryRow(name);
            result.Properties.Caption = caption;
            if (parent == null)
                propertyGridControl1.Rows.Add(result);
            else
                parent.ChildRows.Add(result);
            return result;
        }
        void AddEditorRow(CategoryRow parent, string name, string caption) {
            EditorRow row = new EditorRow(name);
            row.Properties.Caption = caption;
            parent.ChildRows.Add(row);
        }
        #endregion

        #region Sample workbook initialization
        void InitializeWorkbook() {
            workbook = spreadsheetControl1.Document;
            workbook.LoadDocument(DemoUtils.GetRelativePath("CellPropertiesViewer_template.xlsx"));
        }
        #endregion

        protected override void DoShow() {
            base.DoShow();
            spreadsheetControl1.Focus();//焦點
        }
    }

    //屬性對應的類
    public class RangeAdapter {
        Range range;

        public RangeAdapter(Range range) {
            this.range = range;
        }

        
        public Cell Cell { get { return range.Worksheet.Cells[range.TopRowIndex, range.LeftColumnIndex]; } }
        public CellValue Value { get { return range.Value; } }
        public Alignment Alignment { get { return range.Alignment; } }
        public Borders Borders { get { return range.Borders; } }
        public Border LeftBorder { get { return range.Borders.LeftBorder; } }
        public Border TopBorder { get { return range.Borders.TopBorder; } }
        public Border RightBorder { get { return range.Borders.RightBorder; } }
        public Border BottomBorder { get { return range.Borders.BottomBorder; } }
        public Fill Fill { get { return range.Fill; } }
        public DevExpress.Spreadsheet.SpreadsheetFont Font { get { return range.Font; } }
        public Protection Protection { get { return range.Protection; } }
        public Style Style { get { return range.Style; } }
        public string NumberFormat { get { return Cell.NumberFormat; } set { Cell.NumberFormat = value; } }
    }
}
View Code

4.ChartApiMode  這個 顯示c#與VB的demo 后能不管他了 看他前台的demo 這里只看一個

 private void button1_Click(object sender, EventArgs e)
        {
            IWorkbook workbook = ssc.Document;
            Worksheet worksheet = workbook.Worksheets["sheet2"];

            worksheet.Cells["B2"].Value = "Phone";
            worksheet.Cells["c2"].Value = "pecent";
            worksheet.Cells["B4"].Value="adriod";
            worksheet.Cells["c4"].Value = 70;
            worksheet.Cells["b3"].Value = "iso";
            worksheet.Cells["c3"].Value = 30;
            workbook.Worksheets.ActiveWorksheet = worksheet;

            // 建一個本地圖. 取值區間如果有無效數據則忽略
            DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(ChartType.PieExploded, worksheet["B3:C4"]);

            //圖表位置
            chart.TopLeftCell = worksheet.Cells["E2"];
            chart.BottomRightCell = worksheet.Cells["K15"];
            
            // 顏色類型.
            chart.Style = ChartStyle.ColorArea;

            // 隱藏右側的說明
           chart.Legend.Visible = false;

            // 第一個切片的角度 .
            chart.Views[0].FirstSliceAngle = 0;

            // 各個切片是否顯示名稱 百分比 及顯示方式為換行.
            DataLabelOptions dataLabels = chart.Views[0].DataLabels;
            dataLabels.ShowCategoryName = true;
            dataLabels.ShowPercent = true;
            dataLabels.Separator = "\n";

        }
View Code

5.ConditionalFormatting 這個主要是改變背景色 等顯示 代碼實現在TopTradingPartners這個靜態類里  只看一個例子

  public static void ApplyTopImportsConditionalFormatting(Worksheet sheet) {
            ConditionalFormattingCollection conditionalFormattings = sheet.ConditionalFormattings;
            // 建一個 imports 列 5個格改變顏色.
            RankConditionalFormatting cfRule2 = conditionalFormattings.AddRankConditionalFormatting(sheet["Table[Imports]"], ConditionalFormattingRankCondition.TopByRank, 5);
            // Specify formatting options to be applied to cells if the condition is true.
            // Set the background color to light-red.
            cfRule2.Formatting.Fill.BackgroundColor = Color.FromArgb(0xFC, 0xB3, 0xB3);
        }
View Code

6.刪除空列(空行同 只不過是遍歷行操作)

 for (int i = spreadsheetControl1.ActiveWorksheet.Columns.LastUsedIndex; i >= 0; i--)
            {
                bool b = false;
                for (int j = spreadsheetControl1.ActiveWorksheet.Rows.LastUsedIndex; j >= 0; j--)
                {
                    if (spreadsheetControl1.ActiveWorksheet.Rows[j][i].Value.ToString() != "")
                    {
                        b = true;
                        break;
                    }

                }

                if (!b)
                {
                    spreadsheetControl1.ActiveWorksheet.Columns.Remove(i);

                }
            }
View Code

 7.取消所有的合並單元格

 foreach (var item in spreadsheetControl1.ActiveWorksheet.Cells.GetMergedRanges())
            {
                item.UnMerge();
            }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM