using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using System.IO; using DevExpress.Spreadsheet; using ProjectBase.Data.Logs; namespace ProjectBase.Controls.DocViewer { /// /// Excel控件的测试例子 /// public partial class FrmExcelView : DevExpress.XtraEditors.XtraForm { /// /// 加载流数据 /// public Stream Stream { get; set; } /// /// 文件后缀名,如.xls /// public string Extension { get; set; } /// /// 文档文件路径。如果指定了该属性,可以不用设置Stream和Extension属性。 /// public string FilePath { get; set; } /// /// 是否显示打开文件按钮 /// public bool ShowBtnOpenFile { get { return m_ShowBtnOpenFile; } set { m_ShowBtnOpenFile = value; this.btnOpenFile.Visible = this.ShowBtnOpenFile; } } //是否显示保存文件按钮 public bool ShowBtnSaveFile { get { return m_ShowBtnSaveFile; } set { m_ShowBtnSaveFile = value; this.btnSaveFile.Visible = this.ShowBtnSaveFile; } } //记录窗体的名称 readonly string mainFormText; private bool m_ShowBtnOpenFile = false;//是否显示打开文件按钮 private bool m_ShowBtnSaveFile = false;//是否显示保存文件按钮 public FrmExcelView() { InitializeComponent(); //记录窗体的名称,并实现文档变化事件的处理,方便显示新的文件名称 mainFormText = this.Text; this.spreadsheetControl1.DocumentLoaded += new EventHandler(spreadsheetControl1_DocumentLoaded); } private void FrmExcelView_Load(object sender, EventArgs e) { //如果文件流不为空,首先根据Stream对象加载文档,否则根据文件路径进行加载 if (!this.DesignMode) { if (this.Stream != null) { #region MyRegion try { if (!string.IsNullOrEmpty(Extension)) { if (Extension.Equals(".xls", StringComparison.OrdinalIgnoreCase)) { this.spreadsheetControl1.LoadDocument(this.Stream, DocumentFormat.Xls); } else if (Extension.Equals(".xlsx", StringComparison.OrdinalIgnoreCase)) { this.spreadsheetControl1.LoadDocument(this.Stream, DocumentFormat.Xlsx); } else if (Extension.Equals(".csv", StringComparison.OrdinalIgnoreCase)) { this.spreadsheetControl1.LoadDocument(this.Stream, DocumentFormat.Csv); } else { this.spreadsheetControl1.LoadDocument(this.Stream, DocumentFormat.Xls); } } else { this.spreadsheetControl1.LoadDocument(this.Stream, DocumentFormat.Xls); } } catch (Exception ex) { DevExpress.XtraEditors.XtraMessageBox.Show("加载Excel文件失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LogHelper.log.Error(string.Format("加载Excel文件失败,错误为{0}", ex.ToString())); } #endregion } else if (!string.IsNullOrEmpty(FilePath)) { this.spreadsheetControl1.LoadDocument(this.FilePath); } } } /// /// 文档变化后,实现对新文件名称的显示 /// void spreadsheetControl1_DocumentLoaded(object sender, EventArgs e) { string fileName = Path.GetFileName(this.spreadsheetControl1.Document.Path); if (String.IsNullOrEmpty(fileName)) { Text = mainFormText; } else { Text = fileName + " - " + mainFormText; } } /// /// 打开Excel文件 /// private void btnOpenFile_Click(object sender, EventArgs e) { string filePath; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Excel(*.xls)|*.xls|All File(*.*)|*.*"; dialog.Title = "Excel选择"; dialog.RestoreDirectory = true; dialog.FileName = null; if (dialog.ShowDialog() == DialogResult.OK) { filePath = dialog.FileName; } else { filePath = string.Empty; } if (!string.IsNullOrEmpty(filePath)) { IWorkbook workbook = spreadsheetControl1.Document; workbook.LoadDocument(filePath); } } /// /// 保存Excel文件 /// private void btnSaveFile_Click(object sender, EventArgs e) { spreadsheetControl1.SaveDocument(); this.Close(); } /// /// 另存为Excel文件 /// private void btnSaveAs_Click(object sender, EventArgs e) { string dir = System.Environment.CurrentDirectory; string filePath = null; SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Excel(*.xls)|*.xls|All File(*.*)|*.*"; dialog.Title = "保存Excel"; dialog.FileName = ""; dialog.RestoreDirectory = true; if (!string.IsNullOrEmpty(dir)) { dialog.InitialDirectory = dir; } if (dialog.ShowDialog() == DialogResult.OK) { filePath = dialog.FileName; } if (!string.IsNullOrEmpty(filePath)) { try { IWorkbook workbook = spreadsheetControl1.Document; workbook.SaveDocument(filePath); DevExpress.XtraEditors.XtraMessageBox.Show("保存Excel文件成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } catch (Exception ex) { DevExpress.XtraEditors.XtraMessageBox.Show("保存Excel文件失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LogHelper.log.Error(string.Format("保存Excel文件失败,错误为{0}", ex.ToString())); } } } /// /// Excel文件打印 /// private void btnPreview_Click(object sender, EventArgs e) { this.Close(); this.spreadsheetControl1.ShowPrintPreview(); } private void btnClose_Click(object sender, EventArgs e) { spreadsheetControl1.SaveDocument(); this.Close(); } } }