发布网友 发布时间:2022-04-21 17:35
共3个回答
懂视网 时间:2022-04-27 13:49
很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI。
NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel报表,并且在后台调用Microsoft Excel ActiveX更有效率;从Office文档中提取文本,以帮助您实现全文索引功能(大多数时候,此功能用于创建搜索引擎); 从Office文档提取图像; 生成包含公式的Excel工作表。
一.NPOI组件概述:
NPOI是完全免费使用; 涵盖Excel的大多数功能(单元格样式,数据格式,公式等);支持xls,xlsx,docx;设计为面向接口(看看NPOI.SS命名空间);支持不仅导出而且导入; .Net 2.0甚至为xlsx和docx(虽然我们也支持.NET 4.0); 来自世界各地的成功案例;巨大的基本例子;对隔离存储没有依赖。
以上是NPOI的优点,其他一些优点可以不用太在意,估计很多人对“支持xls,xlsx,docx”这一特点感觉有些惊讶,因为在很多人的印象里面NPOI就是对Excel进行相关的操作,但是在这里突然看到了对docx也可以操作,这一特点可能让很多人感到欣喜,因为NPOI的的确确是一个很不错的组件,用过的人都说好,我也不例外。
NPOI的运行要求:VS2010与.NET 4.0运行时;VS2005或VS2008与.NET 2.0运行时(SP1);vs2003与.NET 1.1;Mono;ASP.NET中的中等信任环境。
二.NPOI核心类和方法解析:
以上是对NPOI的相关背景和使用环境做了一个简单的介绍,接下来我具体的看一下NPOI的一些核心类和方法,由于下载的是DLL文件,还是采用.NET Reflector对DLL文件进行反编译,以此查看源代码。
如果需要具体的了解NPOI可以直接访问:http://npoi.codeplex.com/SourceControl/latest,提供了NPOI的源码和一些demo,由于本溪介绍的重点是NPOI对Excel的操作,所以下面的类和实例主要是对操作Excel的介绍,如果需要对docx的操作,可以具体查看相应的类demo。
1.XSSFWorkbook类CreateSheet():创建表。
public ISheet CreateSheet(string sheetname) { if (sheetname == null) { throw new ArgumentException("sheetName must not be null"); } if (this.ContainsSheet(sheetname, this.sheets.Count)) { throw new ArgumentException("The workbook already contains a sheet of this name"); } if (sheetname.Length > 0x1f) { sheetname = sheetname.Substring(0, 0x1f); } WorkbookUtil.ValidateSheetName(sheetname); CT_Sheet sheet = this.AddSheet(sheetname); int index = 1; foreach (XSSFSheet sheet2 in this.sheets) { index = (int) Math.Max((long) (sheet2.sheet.sheetId + 1), (long) index); } Label_0099: foreach (XSSFSheet sheet3 in this.sheets) { index = (int) Math.Max((long) (sheet3.sheet.sheetId + 1), (long) index); } string fileName = XSSFRelation.WORKSHEET.GetFileName(index); foreach (POIXMLDocumentPart part in base.GetRelations()) { if ((part.GetPackagePart() != null) && fileName.Equals(part.GetPackagePart().PartName.Name)) { index++; goto Label_0099; } } XSSFSheet item = (XSSFSheet) base.CreateRelationship(XSSFRelation.WORKSHEET, XSSFFactory.GetInstance(), index); item.sheet = sheet; sheet.id = item.GetPackageRelationship().Id; sheet.sheetId = (uint) index; if (this.sheets.Count == 0) { item.IsSelected = true; } this.sheets.Add(item); return item; }
2.XSSFSheet类Write():将文件流写入到excel。
internal virtual void Write(Stream stream) { bool flag = false; if (this.worksheet.sizeOfColsArray() == 1) { CT_Cols colsArray = this.worksheet.GetColsArray(0); if (colsArray.sizeOfColArray() == 0) { flag = true; this.worksheet.SetColsArray(null); } else { this.SetColWidthAttribute(colsArray); } } if (this.hyperlinks.Count > 0) { if (this.worksheet.hyperlinks == null) { this.worksheet.AddNewHyperlinks(); } CT_Hyperlink[] array = new CT_Hyperlink[this.hyperlinks.Count]; for (int i = 0; i < array.Length; i++) { XSSFHyperlink hyperlink = this.hyperlinks[i]; hyperlink.GenerateRelationIfNeeded(base.GetPackagePart()); array[i] = hyperlink.GetCTHyperlink(); } this.worksheet.hyperlinks.SetHyperlinkArray(array); } foreach (XSSFRow row in this._rows.Values) { row.OnDocumentWrite(); } Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary[ST_RelationshipId.NamespaceURI] = "r"; new WorksheetDocument(this.worksheet).Save(stream); if (flag) { this.worksheet.AddNewCols(); } }
3.XSSFSheet类CreateRow():创建行。
public virtual IRow CreateRow(int rownum) { CT_Row cTRow; XSSFRow row2 = this._rows.ContainsKey(rownum) ? this._rows[rownum] : null; if (row2 != null) { cTRow = row2.GetCTRow(); cTRow.Set(new CT_Row()); } else if ((this._rows.Count == 0) || (rownum > this.GetLastKey(this._rows.Keys))) { cTRow = this.worksheet.sheetData.AddNewRow(); } else { int count = this.HeadMap(this._rows, rownum).Count; cTRow = this.worksheet.sheetData.InsertNewRow(count); } XSSFRow row3 = new XSSFRow(cTRow, this) { RowNum = rownum }; this._rows[rownum] = row3; return row3; }
4.XSSFWorkbook类GetSheet:获取表。
public ISheet GetSheet(string name) { foreach (XSSFSheet sheet in this.sheets) { if (name.Equals(sheet.SheetName, StringComparison.InvariantCultureIgnoreCase)) { return sheet; } } return null; }
5.WorkbookFactory类:
public class PropertySetFactory { public static PropertySet Create(DirectoryEntry dir, string name); public static PropertySet Create(Stream stream); public static SummaryInformation CreateSummaryInformation(); public static DocumentSummaryInformation CreateDocumentSummaryInformation(); }
6.DocumentSummaryInformation:
[Serializable] public class DocumentSummaryInformation : SpecialPropertySet { // Fields public const string DEFAULT_STREAM_NAME = "x0005DocumentSummaryInformation"; // Methods public DocumentSummaryInformation(PropertySet ps); private void EnsureSection2(); public void RemoveByteCount(); public void RemoveCategory(); public void RemoveCompany(); public void RemoveCustomProperties(); public void RemoveDocparts(); public void RemoveHeadingPair(); public void RemoveHiddenCount(); public void RemoveLineCount(); public void RemoveLinksDirty(); public void RemoveManager(); public void RemoveMMClipCount(); public void RemoveNoteCount(); public void RemoveParCount(); public void RemovePresentationFormat(); public void RemoveScale(); public void RemoveSlideCount(); // Properties public int ByteCount { get; set; } public string Category { get; set; } public string Company { get; set; } public CustomProperties CustomProperties { get; set; } public byte[] Docparts { get; set; } public byte[] HeadingPair { get; set; } public int HiddenCount { get; set; } public int LineCount { get; set; } public bool LinksDirty { get; set; } public string Manager { get; set; } public int MMClipCount { get; set; } public int NoteCount { get; set; } public int ParCount { get; set; } public string PresentationFormat { get; set; } public override PropertyIDMap PropertySetIDMap { get; } public bool Scale { get; set; } public int SlideCount { get; set; } }
具体方法:
private void EnsureSection2() { if (this.SectionCount < 2) { MutableSection section = new MutableSection(); section.SetFormatID(SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID2); this.AddSection(section); } }
以上只是对部分的类和方法做了简单的说明,需要了解更多的内容,可以进入官网下载源码,或者使用软件查看DLL文件。
三.NPOI操作实例:
1.枚举(Excel单元格数据类型):
/// <summary> /// 枚举(Excel单元格数据类型) /// </summary> public enum NpoiDataType { /// <summary> /// 字符串类型-值为1 /// </summary> String, /// <summary> /// 布尔类型-值为2 /// </summary> Bool, /// <summary> /// 时间类型-值为3 /// </summary> Datetime, /// <summary> /// 数字类型-值为4 /// </summary> Numeric, /// <summary> /// 复杂文本类型-值为5 /// </summary> Richtext, /// <summary> /// 空白 /// </summary> Blank, /// <summary> /// 错误 /// </summary> Error }
2. 将DataTable数据导入到excel中:
/// <summary> /// 将DataTable数据导入到excel中 /// </summary> /// <param name="data">要导入的数据</param> /// <param name="isColumnWritten">DataTable的列名是否要导入</param> /// <param name="sheetName">要导入的excel的sheet的名称</param> /// <param name="fileName">文件夹路径</param> /// <returns>导入数据行数(包含列名那一行)</returns> public static int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten, string fileName) { if (data == null) { throw new ArgumentNullException("data"); } if (string.IsNullOrEmpty(sheetName)) { throw new ArgumentNullException(sheetName); } if (string.IsNullOrEmpty(fileName)) { throw new ArgumentNullException(fileName); } IWorkbook workbook = null; if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0) { workbook = new XSSFWorkbook(); } else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0) { workbook = new HSSFWorkbook(); } FileStream fs = null; try { fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); ISheet sheet; if (workbook != null) { sheet = workbook.CreateSheet(sheetName); } else { return -1; } int j; int count; //写入DataTable的列名,写入单元格中 if (isColumnWritten) { var row = sheet.CreateRow(0); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); } count = 1; } else { count = 0; } //遍历循环datatable具体数据项 int i; for (i = 0; i < data.Rows.Count; ++i) { var row = sheet.CreateRow(count); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); } ++count; } //将文件流写入到excel workbook.Write(fs); return count; } catch (IOException ioex) { throw new IOException(ioex.Message); } catch (Exception ex) { throw new Exception(ex.Message); } finally { if (fs != null) { fs.Close(); } } }
3.将excel中的数据导入到DataTable中:
/// <summary> /// 将excel中的数据导入到DataTable中 /// </summary> /// <param name="sheetName">excel工作薄sheet的名称</param> /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param> /// <param name="fileName">文件路径</param> /// <returns>返回的DataTable</returns> public static DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn, string fileName) { if (string.IsNullOrEmpty(sheetName)) { throw new ArgumentNullException(sheetName); } if (string.IsNullOrEmpty(fileName)) { throw new ArgumentNullException(fileName); } var data = new DataTable(); IWorkbook workbook = null; FileStream fs = null; try { fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0) { workbook = new XSSFWorkbook(fs); } else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0) { workbook = new HSSFWorkbook(fs); } ISheet sheet = null; if (workbook != null) { //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet sheet = workbook.GetSheet(sheetName) ?? workbook.GetSheetAt(0); } if (sheet == null) return data; var firstRow = sheet.GetRow(0); //一行最后一个cell的编号 即总的列数 int cellCount = firstRow.LastCellNum; int startRow; if (isFirstRowColumn) { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { var cell = firstRow.GetCell(i); var cellValue = cell.StringCellValue; if (cellValue == null) continue; var column = new DataColumn(cellValue); data.Columns.Add(column); } startRow = sheet.FirstRowNum + 1; } else { startRow = sheet.FirstRowNum; } //最后一列的标号 var rowCount = sheet.LastRowNum; for (var i = startRow; i <= rowCount; ++i) { var row = sheet.GetRow(i); //没有数据的行默认是null if (row == null) continue; var dataRow = data.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { //同理,没有数据的单元格都默认是null if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); } data.Rows.Add(dataRow); } return data; } catch (IOException ioex) { throw new IOException(ioex.Message); } catch (Exception ex) { throw new Exception(ex.Message); } finally { if (fs != null) { fs.Close(); } } }
4.读取Excel文件内容转换为DataSet:
/// <summary> /// 读取Excel文件内容转换为DataSet,列名依次为 "c0"……c[columnlength-1] /// </summary> /// <param name="fileName">文件绝对路径</param> /// <param name="startRow">数据开始行数(1为第一行)</param> /// <param name="columnDataType">每列的数据类型</param> /// <returns></returns> public static DataSet ReadExcel(string fileName, int startRow, params NpoiDataType[] columnDataType) { var ds = new DataSet("ds"); var dt = new DataTable("dt"); var sb = new StringBuilder(); using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { //使用接口,自动识别excel2003/2007格式 var workbook = WorkbookFactory.Create(stream); //得到里面第一个sheet var sheet = workbook.GetSheetAt(0); int j; IRow row; //ColumnDataType赋值 if (columnDataType.Length <= 0) { //得到第i行 row = sheet.GetRow(startRow - 1); columnDataType = new NpoiDataType[row.LastCellNum]; for (var i = 0; i < row.LastCellNum; i++) { var hs = row.GetCell(i); columnDataType[i] = GetCellDataType(hs); } } for (j = 0; j < columnDataType.Length; j++) { var tp = GetDataTableType(columnDataType[j]); dt.Columns.Add("c" + j, tp); } for (var i = startRow - 1; i <= sheet.PhysicalNumberOfRows; i++) { //得到第i行 row = sheet.GetRow(i); if (row == null) continue; try { var dr = dt.NewRow(); for (j = 0; j < columnDataType.Length; j++) { dr["c" + j] = GetCellData(columnDataType[j], row, j); } dt.Rows.Add(dr); } catch (Exception er) { sb.Append(string.Format("第{0}行出错:{1} ", i + 1, er.Message)); } } ds.Tables.Add(dt); } if (ds.Tables[0].Rows.Count == 0 && sb.ToString() != "") throw new Exception(sb.ToString()); return ds; }
5.从DataSet导出到2003:
/// <summary> /// 从DataSet导出到MemoryStream流2003 /// </summary> /// <param name="saveFileName">文件保存路径</param> /// <param name="sheetName">Excel文件中的Sheet名称</param> /// <param name="ds">存储数据的DataSet</param> /// <param name="startRow">从哪一行开始写入,从0开始</param> /// <param name="datatypes">DataSet中的各列对应的数据类型</param> public static bool CreateExcel2003(string saveFileName, string sheetName, DataSet ds, int startRow, params NpoiDataType[] datatypes) { try { if (startRow < 0) startRow = 0; var wb = new HSSFWorkbook(); var dsi = PropertySetFactory.CreateDocumentSummaryInformation(); dsi.Company = "pkm"; var si = PropertySetFactory.CreateSummaryInformation(); si.Title = si.Subject = "automatic genereted document"; si.Author = "pkm"; wb.DocumentSummaryInformation = dsi; wb.SummaryInformation = si; var sheet = wb.CreateSheet(sheetName); //sheet.SetColumnWidth(0, 50 * 256); //sheet.SetColumnWidth(1, 100 * 256); ICell cell; int j; var maxLength = 0; var curLength = 0; object columnValue; var dt = ds.Tables[0]; if (datatypes.Length < dt.Columns.Count) { datatypes = new NpoiDataType[dt.Columns.Count]; for (var i = 0; i < dt.Columns.Count; i++) { var dtcolumntype = dt.Columns[i].DataType.Name.ToLower(); switch (dtcolumntype) { case "string": datatypes[i] = NpoiDataType.String; break; case "datetime": datatypes[i] = NpoiDataType.Datetime; break; case "boolean": datatypes[i] = NpoiDataType.Bool; break; case "double": datatypes[i] = NpoiDataType.Numeric; break; default: datatypes[i] = NpoiDataType.String; break; } } } // 创建表头 var row = sheet.CreateRow(0); //样式 var style1 = wb.CreateCellStyle(); //字体 var font1 = wb.CreateFont(); //字体颜色 font1.Color = HSSFColor.White.Index; //字体加粗样式 font1.Boldweight = (short)FontBoldWeight.Bold; //style1.FillBackgroundColor = HSSFColor.WHITE.index; style1.FillForegroundColor = HSSFColor.Green.Index; //GetXLColour(wb, LevelOneColor);// 设置图案色 //GetXLColour(wb, LevelOneColor);// 设置背景色 style1.FillPattern = FillPattern.SolidForeground; //样式里的字体设置具体的字体样式 style1.SetFont(font1); //文字水平对齐方式 style1.Alignment = HorizontalAlignment.Center; //文字垂直对齐方式 style1.VerticalAlignment = VerticalAlignment.Center; row.HeightInPoints = 25; for (j = 0; j < dt.Columns.Count; j++) { columnValue = dt.Columns[j].ColumnName; curLength = Encoding.Default.GetByteCount(columnValue.ToString()); maxLength = (maxLength < curLength ? curLength : maxLength); var colounwidth = 256 * maxLength; sheet.SetColumnWidth(j, colounwidth); try { //创建第0行的第j列 cell = row.CreateCell(j); //单元格式设置样式 cell.CellStyle = style1; try { cell.SetCellType(CellType.String); cell.SetCellValue(columnValue.ToString()); } catch (Exception ex) { throw new Exception(ex.Message); } } catch (Exception ex) { throw new Exception(ex.Message); } } // 创建每一行 for (var i = startRow; i < ds.Tables[0].Rows.Count; i++) { var dr = ds.Tables[0].Rows[i]; //创建第i行 row = sheet.CreateRow(i + 1); for (j = 0; j < dt.Columns.Count; j++) { columnValue = dr[j]; curLength = Encoding.Default.GetByteCount(columnValue.ToString()); maxLength = (maxLength < curLength ? curLength : maxLength); var colounwidth = 256 * maxLength; sheet.SetColumnWidth(j, colounwidth); try { //创建第i行的第j列 cell = row.CreateCell(j); // 插入第j列的数据 try { var dtype = datatypes[j]; switch (dtype) { case NpoiDataType.String: { cell.SetCellType(CellType.Numeric); cell.SetCellValue(columnValue.ToString()); } break; case NpoiDataType.Datetime: { cell.SetCellType(CellType.Numeric); cell.SetCellValue(columnValue.ToString()); } break; case NpoiDataType.Numeric: { cell.SetCellType(CellType.Numeric); cell.SetCellValue(Convert.ToDouble(columnValue)); } break; case NpoiDataType.Bool: { cell.SetCellType(CellType.Numeric); cell.SetCellValue(Convert.ToBoolean(columnValue)); } break; case NpoiDataType.Richtext: { cell.SetCellType(CellType.Numeric); cell.SetCellValue(columnValue.ToString()); } break; } } catch (Exception ex) { cell.SetCellType(CellType.Numeric); cell.SetCellValue(columnValue.ToString()); throw new Exception(ex.Message); } } catch (Exception ex) { throw new Exception(ex.Message); } } } //生成文件在服务器上 using (var fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write)) { wb.Write(fs); } return true; } catch (Exception er) { throw new Exception(er.Message); } }
6.从DataSet导出到MemoryStream流2007:
/// <summary> /// 从DataSet导出到MemoryStream流2007 /// </summary> /// <param name="saveFileName">文件保存路径</param> /// <param name="sheetName">Excel文件中的Sheet名称</param> /// <param name="ds">存储数据的DataSet</param> /// <param name="startRow">从哪一行开始写入,从0开始</param> /// <param name="datatypes">DataSet中的各列对应的数据类型</param> public static bool CreateExcel2007(string saveFileName, string sheetName, DataSet ds, int startRow, params NpoiDataType[] datatypes) { try { if (startRow < 0) startRow = 0; var wb = new XSSFWorkbook(); var sheet = wb.CreateSheet(sheetName); ICell cell; int j; var maxLength = 0; int curLength; object columnValue; var dt = ds.Tables[0]; if (datatypes.Length < dt.Columns.Count) { datatypes = new NpoiDataType[dt.Columns.Count]; for (var i = 0; i < dt.Columns.Count; i++) { var dtcolumntype = dt.Columns[i].DataType.Name.ToLower(); switch (dtcolumntype) { case "string": datatypes[i] = NpoiDataType.String; break; case "datetime": datatypes[i] = NpoiDataType.Datetime; break; case "boolean": datatypes[i] = NpoiDataType.Bool; break; case "double": datatypes[i] = NpoiDataType.Numeric; break; default: datatypes[i] = NpoiDataType.String; break; } } } //创建表头 var row = sheet.CreateRow(0); //样式 var style1 = wb.CreateCellStyle(); //字体 var font1 = wb.CreateFont(); //字体颜色 font1.Color = HSSFColor.White.Index; //字体加粗样式 font1.Boldweight = (short)FontBoldWeight.Bold; //style1.FillBackgroundColor = HSSFColor.WHITE.index; //GetXLColour(wb, LevelOneColor); // 设置图案色 style1.FillForegroundColor = HSSFColor.Green.Index; //GetXLColour(wb, LevelOneColor);// 设置背景色 style1.FillPattern = FillPattern.SolidForeground; //样式里的字体设置具体的字体样式 style1.SetFont(font1); //文字水平对齐方式 style1.Alignment = HorizontalAlignment.Center; //文字垂直对齐方式 style1.VerticalAlignment = VerticalAlignment.Center; row.HeightInPoints = 25; for (j = 0; j < dt.Columns.Count; j++) { columnValue = dt.Columns[j].ColumnName; curLength = Encoding.Default.GetByteCount(columnValue.ToString()); maxLength = (maxLength < curLength ? curLength : maxLength); var colounwidth = 256 * maxLength; sheet.SetColumnWidth(j, colounwidth); try { //创建第0行的第j列 cell = row.CreateCell(j); //单元格式设置样式 cell.CellStyle = style1; try { cell.SetCellValue(columnValue.ToString()); } catch (Exception ex) { throw new Exception(ex.Message); } } catch (Exception ex) { throw new Exception(ex.Message); } } // 创建每一行 for (var i = startRow; i < ds.Tables[0].Rows.Count; i++) { var dr = ds.Tables[0].Rows[i]; //创建第i行 row = sheet.CreateRow(i + 1); for (j = 0; j < dt.Columns.Count; j++) { columnValue = dr[j]; curLength = Encoding.Default.GetByteCount(columnValue.ToString()); maxLength = (maxLength < curLength ? curLength : maxLength); var colounwidth = 256 * maxLength; sheet.SetColumnWidth(j, colounwidth); try { //创建第i行的第j列 cell = row.CreateCell(j); // 插入第j列的数据 try { var dtype = datatypes[j]; switch (dtype) { case NpoiDataType.String: { cell.SetCellValue(columnValue.ToString()); } break; case NpoiDataType.Datetime: { cell.SetCellValue(columnValue.ToString()); } break; case NpoiDataType.Numeric: { cell.SetCellValue(Convert.ToDouble(columnValue)); } break; case NpoiDataType.Bool: { cell.SetCellValue(Convert.ToBoolean(columnValue)); } break; case NpoiDataType.Richtext: { cell.SetCellValue(columnValue.ToString()); } break; } } catch (Exception ex) { cell.SetCellValue(columnValue.ToString()); throw new Exception(ex.Message); } } catch (Exception ex) { throw new Exception(ex.Message); } } } //生成文件在服务器上 using (var fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write)) { wb.Write(fs); } return true; } catch (Exception er) { throw new Exception(er.Message); } }
7.读Excel-根据NpoiDataType创建的DataTable列的数据类型:
/// <summary> /// 读Excel-根据NpoiDataType创建的DataTable列的数据类型 /// </summary> /// <param name="datatype"></param> /// <returns></returns> private static Type GetDataTableType(NpoiDataType datatype) { var tp = typeof(string); switch (datatype) { case NpoiDataType.Bool: tp = typeof(bool); break; case NpoiDataType.Datetime: tp = typeof(DateTime); break; case NpoiDataType.Numeric: tp = typeof(double); break; case NpoiDataType.Error: tp = typeof(string); break; case NpoiDataType.Blank: tp = typeof(string); break; } return tp; } /// <summary> /// 读Excel-得到不同数据类型单元格的数据 /// </summary> /// <param name="datatype">数据类型</param> /// <param name="row">数据中的一行</param> /// <param name="column">哪列</param> /// <returns></returns> private static object GetCellData(NpoiDataType datatype, IRow row, int column) { switch (datatype) { case NpoiDataType.String: try { return row.GetCell(column).DateCellValue; } catch { try { return row.GetCell(column).StringCellValue; } catch { return row.GetCell(column).NumericCellValue; } } case NpoiDataType.Bool: try { return row.GetCell(column).BooleanCellValue; } catch { return row.GetCell(column).StringCellValue; } case NpoiDataType.Datetime: try { return row.GetCell(column).DateCellValue; } catch { return row.GetCell(column).StringCellValue; } case NpoiDataType.Numeric: try { return row.GetCell(column).NumericCellValue; } catch { return row.GetCell(column).StringCellValue; } case NpoiDataType.Richtext: try { return row.GetCell(column).RichStringCellValue; } catch { return row.GetCell(column).StringCellValue; } case NpoiDataType.Error: try { return row.GetCell(column).ErrorCellValue; } catch { return row.GetCell(column).StringCellValue; } case NpoiDataType.Blank: try { return row.GetCell(column).StringCellValue; } catch { return ""; } default: return ""; } } /// <summary> /// 获取单元格数据类型 /// </summary> /// <param name="hs">单元格对象</param> /// <returns></returns> private static NpoiDataType GetCellDataType(ICell hs) { NpoiDataType dtype; DateTime t1; var cellvalue = ""; switch (hs.CellType) { case CellType.Blank: dtype = NpoiDataType.String; cellvalue = hs.StringCellValue; break; case CellType.Boolean: dtype = NpoiDataType.Bool; break; case CellType.Numeric: dtype = NpoiDataType.Numeric; cellvalue = hs.NumericCellValue.ToString(CultureInfo.InvariantCulture); break; case CellType.String: dtype = NpoiDataType.String; cellvalue = hs.StringCellValue; break; case CellType.Error: dtype = NpoiDataType.Error; break; default: dtype = NpoiDataType.Datetime; break; } if (cellvalue != "" && DateTime.TryParse(cellvalue, out t1)) dtype = NpoiDataType.Datetime; return dtype; }
四.总结:
本文是接着上五篇介绍.NET组件,目的只是在于总结一些组件的用法,将文章作为一个引子,各位读者可以根据文章的介绍更加深入的去了解相关组件。有些地方写的有误,还望多多包涵和指正,欢迎大家给我建议介绍一些你们在项目中经常使用的组件,可以跟大家做一个分享。
热心网友 时间:2022-04-27 10:57
紫微斗数预测:
您是个善於调和内外看法,冷静处事的人,做事会尽量兼顾主客观意见,整合折衷,凝聚共识,并且尝试放慢脚步,仔细观察。
从命盘来看,重点宫位在「卯」,正是先天命宫,太阳、天梁自坐本宫,在个性上来说,将会带有豪迈和清高的性质,文昌、文曲、天魁、天钺等吉星相拱会照,意味著学习、反省等态度也会增强,而擎羊再会入本宫,则会推升突破的优点,再者,太阳、天梁、文昌、禄存等星曜相互作用,形成「皇殿朝班」格局,更带有「冷静多学、手法高明」的影响力。
这些星曜和格局,正显示出您与生俱来的个性优点:
1
好面子,重视形象名声远大於钱财利益,颇在乎周遭对自己的看法,常希望能得到他人的赞赏和肯定,因此喜欢活在掌声中,自己平常也颇能表现,也爱表现,以吸引旁人的目光。
2
豪迈洒脱的特质,乐於照顾别人,能乐於公益,行事风格也通常是自己先动手,走在大家前面的行动领导模式。能为大局著想,不畏辛劳,成功通常是自己努力而来,非侥幸所得。
3
较不喜欢与人争执,而喜欢没有压力或不受*的闲适生活方式。当受压力或*时,会使自己的生活步调变得紊乱,比较不易调适,因此颇爱好大自然,宁愿作闲云野鹤,纵情山林。
4
具有领导性格,喜欢照顾和指导他人,甚至好管闲事,不强求人,循直无私,做事诚实清廉,因而容易受人敬重,但也容易疏忽家人。逻辑推理和组织能力强,思路清晰,平常话虽不多,但当涉及自己的专业领域或有兴趣的话题时,反而能像专家般说得口沫横飞。
5
原本较自我为是的缺点,因受外在环境的影响,例如朋友建议或是吸收外来资讯,反而能够主客观兼顾,想法变得较为均衡。
6
有责任心,能适度负责,该争取的也会争取。抗压力还可以,处理棘手的事物时,会主客观兼顾,为事情找到到最合理的解决方案。虽有自己的想法和做法,也会充分运用外来的资讯,修正并调整自己,因此具有较合理的决策模式。
7
有适度的能力维持情绪平静,减少冲动,有时就算冲动也很快就能自我约束,煞住车,调降波动变化的幅度,思考的完整性提高,能够考虑得较长远,亲和性也增强,能与人搭配、合作,发挥团队力量。
至於缺点方面,您则比较容易顾虑太多,并且拖延时效,常期望能够多方兼顾,却弄得自己绑手绑脚,看法则较保守,有时会过於琐碎,反而因小失大。
值得庆幸的是,您比较能够发挥优点并且适度调整缺点,也就是基本运势具有中等好运,个性比较稳定,通常只要自己有所付出,就能看到改善或成果,因此行事态度应该较为积极,目标也可适度调高,尽量让自己动起来,找机会表现,才能有效发挥先天好运,营造不错的成果。
虽然缺点的影响相对较小,但仍须防微杜渐,平常还是需要留意并调整相关缺点,以避免逐步耗损,渐渐侵蚀成果:
1
过於重视外在声名,言行举止就容易浮夸,打点自己的装扮有时会过於奢华,爱用名牌,或是喜欢结交权贵,看重职称、头衔,在他人看来就显得虚荣心重,爱炫燿,容易满遭损,易遭忌,最后流於贵而不显,秀而不实。
2
具有不错的活力,但自我约制力相对薄弱,做事容易虎头蛇尾,先勤后懒,有心无力,不仅成果大打折扣,随意答应却又做不到,反成了别人眼中的烂好人。
3
眼界高,常常是说得多实践得少,缺乏执行力,总认为自己看重的是较大的方案或较高的目标,对於一般平常的机会反而容易轻忽,因此实质的收获往往受到*。
4
清高无私,坚持真理,一但行动起来,便容易直接指摘他人的错误,不自觉中造*际关系的紧张,结果是把焦点转移到争执,反而掩盖了事情的本意,对名声方面的重视则需留意锋芒太露,易遭忌妒排斥。
5
原本具有强烈自主意识的态度,因受外在环境的牵动,例如朋友不支持或是欠缺足够资讯,反而变得有点迷惘,容易失去方向感。
6
自主性适中,虽能尽量兼顾主客观的想法和意见,但有时反而会因为无法达成共识而感颓丧,或者顾忌小地方而误了重点,因小失大,反而落得众人抱怨,徒增困扰。
7
行动能力下降,显得活力不足,欠缺积极任事的态度,动作较慢,性降低,较不知如何面对挫折,往往只能抱怨以对,有时还会过度担忧,不打紧的因素也一并加进来考虑,使得准备时间拉长,较易错过时效,同时也会让人觉得较为被动。
您这一生的基本运势以老年期的表现最好,落实能力相对稳定,能够调整自己,尝试发挥,因此应该把握住老年期,让自己动起来,好好表现。而青壮年期则是这生最弱的时候,自己的状况变得较不稳定,实力容易打折,较难有效发挥,因此在青壮年期时,态度不宜过於乐观,应该多些谨慎,保守行事。至於少、青年期也还算可以,落实能力略优,稍具表现空间,因此仍宜把握。
在爱情方面,您是个强调对等尊重,活泼主动的人,因此平常和异性相处,就应该多沟通,尽量融合双方想法,凝聚彼此共识,并且主动尝试,再接再厉,偶而讲些笑话,制造欢乐气氛,才能有效散发自己的魅力。
从命盘来看,重点宫位在「丑」,正是先天夫妻宫,天同、巨门自坐本宫,在个性上来说,将会带有开朗和敏锐的性质,天钺三合拱照,并有左右前后夹辅,意味著容让、尊重等态度也会增强,而擎羊、陀罗、铃星等煞星再会入本宫,则会推升克服、发散等优点,再者,火星、擎羊等星曜相互作用,形成「威权出众」格局,更带有「坚毅奋发、突飞猛进」的影响力。
这些星曜和格局,正显示出您与生俱来的爱情优点:
1
松散的感情态度,比较不喜欢太多的感情压力,因此通常不会经营太复杂的感情生活。对於体型较为丰满,甚至略有点胖,年轻带有朝气、脸上常露微笑的异性,较能让自己产生好感。
2
带有欢乐的相处态度,较容易和人交往,人缘往往不错,因此有较多接近异性的机会或较早结婚,自己也可能因为不够坚持原则而产生金屋藏娇的情形,造成感情生活上的困扰。
3
具有不错的表达能力,反应很快,能够清楚的说出事情的重点,颇具说服力,因此自己也比较欣赏口才不错,表达能力强,做事踏实敏锐、不虚浮且不要有太多修饰的异性。
4
实事求是的感情态度,能够不拘於传统,不轻易向现实或环境妥协,努力经营自己的感情生活。相处上也能够追根究底,察明事情的*,让误会拨云见日,试图增进彼此的了解。
5
感情的处理方式原本较为主观,但在事业或工作的历练和影响下,反而变得较能主客观兼顾,显得较为平衡。
6
处理感情的态度适中,自己虽然也算重视爱情,有支配感情的*,但也能试著从对方的角度来看,让自己的做法更加成熟。面对问题会找寻双方都能接受的折衷方案。当遇到心仪的对象,虽不笃定,但还是会试著争取青睐。不如意时,偶有极端的想法,却不太会去做。
7
感情中的热情成分提升,能够主动争取青睐,在异性面前表现自己,积极度增加,遇到波折、变化,也较能坦然接受,不会有太多的抱怨,装扮则显得帅气、有个性,感情生活中添加了较多的新鲜感。
至於缺点方面,您则比较容易误判情势,并且冲动尖锐,对於尚未确认的爱情往往信心不足,而对於稳定的恋情则又过於自信,并且较难按耐住情绪冲动,沟通会较尖锐直接。
必须留意的是,由於您很容易就突显出缺点来,也就是爱情运势具有强烈坏运,这并非注定婚姻难成,而是自己的爱情态度并不稳定,很不擅长处理两性问题,爱情容易出现意料之外的变化,徒增困扰,并且带来相当的阻力,因此面对爱情不宜乐观,应该降低自己的期望或标准,并多学习如何相处而不仅仅是爱与不爱,才有机会营造稳定的爱情。
以下则是有关您缺点的详细分析,作为您平常留意与调整参考:
1
对於打扮过於时髦,或是身材削瘦的异性,较不容易引起自己的注意和喜爱。基本上也不喜欢受拘束,因此如果对方对自己有较多的强制要求或不同意见时,容易产生情绪性的反弹,增加争执的机会。
2
懒逸的感情态度,容易把自己的事情请托给对方办理,或随便的使用对方的物品等等,把自己的福气建立在别人的身上,甚至有些时候还让对方来善后,而引起反感。
3
口才好,喜欢讲道理,但言多必失,容易为了无关紧要的事情而起口角。往往著重在对方的缺点,语言尖锐,可能因此赢了面子,却失了裏子,使得恋情横生波折。因此最好能修饰沟通的方式,多看对方的优点,多些包容的雅量,少指摘。
4
具有叛逆的感情态度,不太理会世俗的伦理,因而较易和已婚者发生感情。不轻易妥协的心态,也容易让对方认为自己过於挑剔,不满现实,常常对方已经说得清楚,自己却仍旧不太重视对方的好意或想法,还要再去查证确认,让人有不被信任的感觉,易生误会。
5
原本较为重视感情的用心,在对事业或工作的分心和影响下,反而会打些折扣,偶而也将就将就了。
6
担负感情的责任仍不够强烈,偶有疏忽或推托而让感情生活产生变化。对於择偶,又是怕对方太好,又是怕对方太差,想得周全,却易错失机缘。自己的看法还是会受到亲友的影响或随著年龄增长而调整。如果觉得对方不适合,则会因顾虑对方的感受而不忍告知,不仅增加自己困扰,也会因此拖延而让事情变得尴尬。
7
沟通上的理性内涵减少,体贴的用心相对不足,反而是情绪性的冲动增加,较容易出现口角争执,遇到波折,应对上也较容易欠缺周详的考虑,让事情横生枝节,感情的变化幅度升高。
您这一生的爱情运势,整体来说并不好,自己并不容易掌握爱情机会,爱情机运偏弱,感情的发展常和自己的预期有段落差,因此对爱情的看法比较无法乐观!
适合您的对象应该长得一付娃娃脸,看起来比较年轻,喜欢开玩笑,而且眉清目秀,眼神诚恳,有时话较多。和您在一起的时候,比较懂得互相尊重,只要您敬他一尺,他便会敬您一丈。他的个性应该是动静皆宜,既能仔细思考、观察事情,也能展现行动和活力,能动能静,静如处子,动如脱兔。
他应该拥有一颗赤子之心,天真好奇,乐於和别人分享快乐,并懂得休闲与生活的重要,不喜欢受拘束,自己也会想办法过得轻松安逸,而且重视传统,有家庭观念,行事通常是按部就班,依照程序。
他也喜欢探究事情*,追根究底,眼见为凭,具有相当敏锐的观察力,会注意小细节,能够一针见血说出事情重点,而且反应快,举一反三,具有不错的口才,善於沟通。
在理财方面,您是个量力而为,谨慎理性的人,能够估量自己的能力,不膨胀自己,了解风险所在,选择较为适合的理财方式,并且小心计画,稳健出手。
从命盘来看,重点宫位在「亥」,正是先天财帛宫,太阴自坐本宫,在个性上来说,将会带有储存的性质,文昌、文曲、天魁等吉星相拱会照,意味著谋略、自我反省等态度也会增强,而擎羊、陀罗、铃星等煞星再会入本宫,则会推升克服阻碍、冲劲等优点,再者,化禄、化权、化科等星曜相互作用,形成「三奇嘉会」格局,更带有「精确拿捏,恰到好处」的影响力。
这些星曜和格局,正显示出您与生俱来的理财优点:
1
能够思考计算,条理分明,相当有计划性,总是清楚知道什麼钱该赚或可以赚。了解累积的必要性,具有储蓄的明显特质,因此会存钱,甚至暗藏私房钱。
2
原本求财的态度是以自己的想法为主,但在吸取消费经验之后,反而能够了解主客观均衡的重要,变得较能兼顾自己和他人的想法,寻求较周全的对策。
3
能够在赚钱和自己的生活之间求取平衡,在追求财富的同时,也了解人生还包含其他不同层面的需要。求财会尽量掌握风险,以降低所需面对的竞争和压力。虽拥有自己的理财方式,但也能接受他人建议或方案,适度调整。如果挑战超过自己所能负荷,也不会强扮英雄,打肿脸充胖子,因此颇能在坚持和转圜之间,选择最适合自己的财务策略。
4
赚钱的做法上,小心留意略胜於积极行动,通常都是先考虑安全无失,尽量降低风险之后,再追求契机,努力把握机会,如果不够稳当,宁可稍缓一缓,经验的累积能力相对成长,求财的手段是在安稳之下力求表现。
至於缺点方面,您则容易自我设限,并且计较等待,理财观念既不够宽广,眼光也不够深远,往往限缩了自己赚钱的管道和手段,有时还会过於小心算计,以致拖延时效,错失时机。
值得庆幸的是,您相当能够发挥优点并且有效改善缺点,也就是钱财运势具有强烈好运,自己不仅很能维持财务状况稳定,留意赚钱机会,钱财似乎也能为自己带来不错的助力,进而影响并改善其他运势,因此理财态度应该较为积极、乐观,多花些心思,找机会表现,多在赚钱方面下功夫,才能有效发挥自己的好运,营造理想的成果。
虽然缺点的影响相对较小,但平常还是需要留意并调整相关缺点,以避免渐渐侵蚀成果:
1
动脑理财,应该著重在计画,而不是计较。完善合理的计画可以得到务实的成果,而计较的思考,会流於算计谋略,权术阴谋,不仅造成理财的困难,更会变得小气,甚至忌妒别人的成就,降低了理财的收获。
2
原本求财的态度是以自己的想法为主,但在较无法掌控成本的影响下,反而让自己想要多斟酌别人的看法,追求主客观的均衡,有时却弄得顾此失彼,两边不讨好。
3
赚钱的态度倾向面面俱到,既不想遗漏消费的情报和资讯,或是他人的看法或建议,也不想让自己失去主导,因而容易顾此失彼,徒增困扰。做法上既无法显出坚决的意志,实质的包容空间也不够宽广。
4
自己在赚钱的做法上,迟疑多虑略强於冒险冲动,顾忌变多,想东想西延缓了行动,偶而想要积极些以掌握契机,却又受限於多虑而达不到效果,只好再退回原来的做法,求财的手段因而在保守中略见矛盾。
您这一生的钱财运势,整体来说相当稳定,对钱财的态度倾向乐观,幸运之神似乎也站在自己这一边,尤其是在青壮年期,更是不错,赚钱的机会增加,若从事投资也较能够有所斩获,感觉算是蛮好运的!
您先天的动产投资机运达到优良程度,颇具获利空间,应该是您不错的选择!自己不仅颇具买卖手段,能够抓住赚钱的管道或方法,而且对於投资物件的鉴赏能力也不错,能够留意投资机会,因此如果进行投资,态度可以积极点,并适度提高获利目标,以刺激自己有效发挥实力。至於动产物件方面,先天上您应该比较适合考虑具有专利或是巧艺的商品,例如著作权、专利、字画、邮票、设计等。
不动产投资方面也和动产一样,达到优良程度,颇具获利空间,应该是您不错的选择!自己颇具买卖手段,能够抓住赚钱的管道或方法,而且对於房地产的鉴赏能力也算突出,因此如果进行投资,态度可以积极点,并适度提高获利目标,以刺激自己有效发挥实力。而在不动产物件方面,先天上您应该比较适合考虑较高的地区如半山、山顶或高楼的高层,或者高价的商业区、高级住宅区或花园别墅等。
在事业和工作方面,您是个能够虚心吸纳,具创新,能突破的人,颇适合朝专业技能方面发展。自己颇具学习能力,能够吸取他人经验,加以运用,并且活泼,有干劲,比较不拘泥於传统,肯尝试,且较能接受挑战和失败,并从中累积经验。
从命盘来看,重点宫位在「未」,正是先天官禄宫,天同、巨门由对宫照入,在个性上来说,将会带有循序和察验的性质,文昌、文曲、天魁等吉星三合拱照,意味著学习、反省等态度也会增强,而擎羊再会入本宫,则会推升移除障碍的优点,再者,太阳、天梁、文昌、禄存等星曜相互作用,形成「皇殿朝班」格局,更带有「冷静多学、手法高明」的影响力。
这些星曜和格局,正显示出您与生俱来的工作优点:
1
工作通常会按照一定的程序进行,能够循序渐进一步步的完成,因此执行工作或任务时,往往显得条理分明,不易混乱。同一时间最好只专心做一件事,如此才能发挥工作效率。
2
实事求是,喜欢追根究底,看证据说话,加以观察敏锐,常能察觉计画的缺失。表达能力强,有辩才,因此在谈判、沟通、接洽等方面常有不错的表现。不会轻易向现实妥协,能突破*以查证并掌握事情的*。
3
对於工作或事业具有较宽广的包容空间,能够多听或接受不同的资讯和意见,以调整自己的看法。工作态度显得较为客观,能吸收,累积经验,有较佳的成长空间。对於工作或事业以外的事情也会留意,能够努力兼顾家庭与事业,让自己拥有较丰富的人生。
4
做事的机动性明显增强,积极度提升,具有行动力,对於挫折和失败也较能以正常的眼光看待,并当作是自己必经的历练过程,机会的撷取能力跟著提升,能够努力追求时效,有时就算必须冒些风险也愿意,工作的性相对增强,亲力亲为解决问题的机会增加,手段较显灵活。
至於缺点方面,您则容易想多做少,躲避压力,并且急躁冲动,增添变化,做事比较欠缺方向,想这想那,三心二意,显得有点虎头蛇尾,甚至还会逃避压力,推托延宕,一旦有了想法就想立刻动手,心态急切粗率,因此事情较易产生变化,也较易遭遇挫折。
必须留意的是,由於您较易突显出缺点来,也就是事业运势具有中等坏运,这并非注定事业上一事无成,而是自己工作态度较不稳定,容易出现意料之外的变化,增加困扰和挫折,因此工作宜以安稳为先,应该适度降低自己的期望或目标,并可考虑较常更换工作内容或轮调的单位或公司,以维持新鲜感,较能降低冲击,保持稳定。
以下则是有关您缺点的详细分析,作为您平常留意与调整参考:
1
工作有点安逸懒散的倾向,不喜欢太过繁复的事项。对於突发状况,例如别人临时的打扰,往往会造成自己心理的压力和困扰,进而影响工作进度。因此最好不要同时一心多用,容易效果不彰,而且拟定计画时,最好能保守些,以避免太乐观而做不到。
2
疑心相对较重,遇事容易挑剔,显现对现状的不满。做事喜欢亲力亲为,因此往往较劳心劳力。报告常采口头方式,较不喜欢诉诸文字,容易因此欠缺佐证依据而产生问题。
3
在工作或事业上的负荷能量较低,面对压力或竞争时,容易欠缺对策,甚至躲避,而让事情延宕,造成行事成效低弱。对於工作或事业也比较没有长远的想法和规划,容易受到外在环境或他人的影响而变动。做事往往虎头蛇尾,责任感较弱,容易为自己的疏失或挫败找理由,原谅自己,降低了追求成功的企图。
4
做事的理性明显降低,没什麼等待的耐心,就算计画并不周全,也愿意面对风险,尽速行动,因而容易欠缺谨慎的思虑,增加了事情的波动和变化,学习和成长的空间相对受到压缩,对於繁琐或重复的事项往往不愿承接,也较无法善用团队的力量解决问题,手段显得较为冲动,隐含投机的倾向。
您这一生的事业运势以青壮年期的机运最好,事业或工作在这时较有表现空间,感觉上颇为乐观,经营事业的意愿也较明显,算是此生事业或工作最为稳定的时期。而老年期则是这生最弱的时候,自己并不容易掌握事业或工作上的表现机会,意料之外的变化比较多,发展往往和自己预期有段落差,因此对事业或工作的看法比较无法乐观。至於少、青年期也较偏弱,事业机运并不有利,工作或事业表现较难如意,挫折感升高,因此不宜过於轻忽,应该谨慎面对。
先天上,您的事业运势以「开朗」的特质最为突显,也就是说,较能符合您个性的是具娱乐或享受性质的行业,例如娱乐、电玩、休闲、演艺、大众传播、餐饮、旅游等,会比较能够引起您的兴趣,刺激您的工作意愿,或者是和儿童有关的行业,例如亲子、幼教、游乐设施、玩具等。其次,「探究」的特质也具有影响力,因此也可考虑带有传达或批判性质的行业,例如教育、研究、*、司法、法律、社运等,或者是需要和国外单位来往的行业,例如外交、国际贸易等。
由於出外运势为凶,出外的危险性增加,人际关系也易带来困扰,因此到外地工作必须谨慎,最好能缓则缓。如果要让工作绩效提升,对您来说,最好能优先处理或者著重在困难度较低,具有趣味,工作气氛和谐,且每隔一小段时间就能稍事休息一下的事务,会较容易有所表现。其次,则可选择需要谈判、沟通或口头报告的事务,或者需要查证、确认,找出真正原因的事务,也会较有机会发挥。工作方式最好不要太过死板,具有弹性,且需较多技术或专业能力,少开会,多行动,会较理想。
另外,如果工作环境能够带有轻松、快乐气息,能够让人放松,并且稍加摆放一些好玩有趣的饰品,或者可以清除不必要器具,移除障碍,增加动线,方便人员来往沟通,应该能够有效提振您的工作精神,更加增长工作效率。
以整体先天命盘来看,您创业成功的困难度相当高!如果自行创业,回收会较慢,因此各项准备应比预估多,宁保守,勿乐观,勿取巧,并应寻求合作对象。
在创业方面,您最佳的优点是销售收入,另外在成本控制、资金周转等方面也不错,加上执行能力、人员管理等方面也具有正面潜力,都是可以多加发挥的地方。
较差的部份则包含组织营运和业务开发等项目,尤以组织营运最不理想,必须在创业时多加留意和补强,才能降低营运的困难和风险。
在职场人际方面,您先天上和下属的关系颇具潜力,只要能够付出,往往也会得到回报。而和同事以及主管的关系走的则是坏运,双方的交集比较少,关系通常比较冷淡。
整体而言,您在职场上应该比较容易和下属建立和谐关系,友善相处,并且获得助力,偶而他们也会为您带来好运,应该好好善加运用!
然而,和同事以及主管之间则较易出现摩擦,甚至受到拖累或制肘,他们常会带来破坏,成为您的包袱和拖累,尤其是主管最为明显,应该特别留意,小心防范!
您先天的体质还算不错,抵抗力较强,生病复原的速度会比较快,只要自己用心养护,多运动保健,便能提升体质,改善健康。体能方面也算不错,在体育方面应有表现空间,如果参加体育训练,进步幅度应该会和自己所预期相当接近。
虽然肌力似乎较耐力稍强,但两方面应该都还不错,速度和力气略长於协调性和韵律感。
在您的体质当中,「土」和「火」两种五行属性较为突显,从中医的角度来说,分别是指五脏中「脾」和「心」两种系类的相关器官,这是先天上您比较容易失调或出现异常的地方,因此平常就应该多注意相关的养生保健。其中,脾主统血,司运化,生肌养肉,开窍於口,与胃互为表里,因此脾和胃、口唇、肌肉等皆有关,均属於「脾」系类的相关器官,而心主生血,司神明,运行血脉,开窍於舌,与小肠互为表里,因此心和小肠、舌、血脉等皆有关,均属於「心」系类的相关器官。在您先天体质中,尤以口唇、食道和血压、血管的功能最为虚弱,因此更应注重相关的养护,避免提早出现衰退的现象。
您这一生的健康运势以少、青年期的表现最好,体能状况较为稳定,免疫能力不错,如果生病,复原情形也较理想,因此应该好好把握住少、青年期,多些健身活动,不仅能够有效增强体力,也能具有较佳做事精神。而青壮年期则是这生最弱的时候,自己的体能状况下滑,较易出现病痛,因此在青壮年期时,应增加健身活动,并留意调养身体,防范感染,不宜过度乐观。至於老年期也是不错,身体状况较佳,显得比较稳定,若能多从事健身运动,将可明显强化健康,宜多把握。
热心网友 时间:2022-04-27 12:15
付费内容限时免费查看回答紫薇命盘免费算命是中国传统命理学的最重要的支派之一。紫微斗数免费排盘中男生的命运先看命身,次看财官迁;紫薇排盘中女生的命运先看命身吉凶,二看福德宫,紫薇命盘详解之八字理论,可预测一个人的命运、吉凶祸福。
提问我孩子是1996年6月26日酉时生的,我想问一下他的好运何时开走
回答稍等一下
提问是新历哟
回答您好,请问你的儿子贵姓
您好,请问你的儿子贵姓
还有名字
提问邓富元
回答紫薇命盘详解命宫可以看出你的个性、心中的想法、人生观、人格特质、性向、专长、兴趣喜好、优点与缺点。对于外在而言,命宫可以代表你的行为举止,以及面对各种事物的反应。
你的命宫受「天机星」与「巨门星」影响,有以下的特质:冷静、幽默、好动、反应快、讲义气、创意多、喜欢竞争、联想力丰富、不按牌理出牌、喜欢自由自在、善于沟通与协调、善于推理分析、喜欢接触新鲜和有趣的事物。你的整体格局属于文重于武的格局,先天的气势与承担事情的能力比较弱。不过,只要后天肯努力,凡事尽心尽力,也能缔造一番不错的成果。
你的主星天机巨门
天机是支援型
他们多热情爽朗,很喜欢影响别人,发表高论,是很好的幕僚人才,所以称之为支持型。
天机
优点:情活跃,有口才善辩,喜以理服人;无加会凶星,心地多属仁慈,温文尔雅讲话斯文,爱整洁喜打扮,重感情孝义六亲,富同情心,充满热情,乐于助人,别人不请而助,擅于联络结党,因而朋友众多;善察言观色,喜谄媚逢迎性
缺点:脾气急躁执拗,无耐心又小心谨慎,喜怒不形于色,表面很平和,内心急躁沉闷而多变,多心机计较,情绪不稳定,自持才华,因幻想太多,钻牛角尖,疑心多变,忧柔寡断,因而聪明反被聪明误,裹足不前,有时轻信他人,易招人怨。中年后性情会变得稳重一些。男命多有点神经紧张或过敏,女人多愁善感。
理财观:天机星本身的储蓄能力并不太好,这是因为天机的想法有时太过天马行空些,只有考虑结果而常常忽略了过程。所以常常是冷静的思考、冲动的行动。因此结果不是大好就是大坏,非常的极端戏剧化,也因此而给人一
提问我孩子是1996年6月26日酉时生的是新历,我想问一下他的何时走好运
回答命运分析:1996年6月26日出生属鼠的人中等身坐死地,一生劳苦,辛苦得财奔波,干生支,对妻子好,伤官生财,对上辈孝顺。日主泄出丁火,主利他人,所以对别人照顾有加,可自己到老,却一无所有。
鼠年