国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Openxml入門---Openxm讀取Excel數據

2019-11-14 16:25:40
字體:
來源:轉載
供稿:網友

    Openxml讀取Excel數據: 有些問題,如果當Cell 里面是 日期和浮點型的話,對應的Cell.DataType==Null,對應的時間會轉換為一個浮點型,對于這塊可以通過DateTime.FromOADate(double d)轉換為時間。 可是缺點的地方就是,如果Cell.DataType ==NULL, 根本無法確認這個數據到底是 浮點型還是[被轉換為了日期的浮點數]。查閱了很多國外資料,的確國外博客有一部分都反映了。有關Openxml讀取Excel時Cell.DataType==NULL的問題。本例子沒考慮那個問題,現在還沒解決。都后面查詢到更詳細的資料在解決。。其次解決這個問題的方法只有,在數據處理的時候,數據分析我們是可以知道這一列的數據到底是什么類型,然后根據自己的需求,自己對獲取的數據做相應轉換處理。不過如果使用OleDb的Select語句來讀取Excel的時候,就不會出現這個問題,讀取到Datable時候是日期就不會轉換為浮點型數據。而且對象的Datable對于的那個單元格數據還可以直接強制轉換為DateTime。不過用OleDB讀取數據感覺上應該沒有Openxml目前還沒測試大數據,太晚了。該sleep了。如果有大神了解Openxml讀取表格,請指點[需要解決問題是:EXCEL的表格中CELL 的 DateTime類型和浮點類型數據,在獲取后如何區分。因為使用Openxml獲取后日期會被自動轉換為浮點型]

using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using DocumentFormat.OpenXml.Packaging;using DocumentFormat.OpenXml.SPReadsheet;namespace ReadExcel{    public class Program    {        static void Main(string[] args)        {            DataTable dt = new DataTable();            using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(@"Test.xlsx", false))            {                WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;                IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();                string relationshipId = sheets.First().Id.Value = sheets.First(x => x.Name == "TestSheet").Id.Value;                WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);                Worksheet workSheet = worksheetPart.Worksheet;                SheetData sheetData = workSheet.GetFirstChild<SheetData>();                Row[] rows = sheetData.Descendants<Row>().ToArray();                // 設置表頭DataTable                foreach (Cell cell in rows.ElementAt(0))                {                    dt.Columns.Add((string)GetCellValue(spreadSheetDocument, cell));                }                // 添加內容                for (int rowIndex = 1; rowIndex < rows.Count(); rowIndex++)                {                    DataRow tempRow = dt.NewRow();                    for (int i = 0; i < rows[rowIndex].Descendants<Cell>().Count(); i++)                    {                        tempRow[i] = GetCellValue(spreadSheetDocument, rows[rowIndex].Descendants<Cell>().ElementAt(i));                    }                    dt.Rows.Add(tempRow);                }            }            Console.ReadKey();        }        public static string GetCellValue(SpreadsheetDocument document, Cell cell)        {            SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart;            string value = cell.CellValue.InnerXml;            if (cell.DataType != null && (cell.DataType.Value == CellValues.SharedString || cell.DataType.Value == CellValues.String || cell.DataType.Value == CellValues.Number))            {                return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;            }            else  //浮點數和日期對應的cell.DataType都為NULL            {
// DateTime.FromOADate((double.Parse(value)); 如果確定是日期就可以直接用過該方法轉換為日期對象,可是無法確定DataType==NULL的時候這個CELL 數據到底是浮點型還是日期.(日期被自動轉換為浮點
return value; } } }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 从化市| 汕头市| 金沙县| 囊谦县| 共和县| 岑巩县| 宝山区| 长宁区| 噶尔县| 万山特区| 通州区| 武城县| 乐东| 金山区| 呼和浩特市| 泽普县| 连州市| 昭通市| 昌都县| 和平区| 和田县| 亚东县| 马鞍山市| 龙泉市| 和田市| 鄂伦春自治旗| 郸城县| 乌海市| 甘孜县| 青河县| 抚远县| 德格县| 柳州市| 澄迈县| 枝江市| 海安县| 施甸县| 绥德县| 贵溪市| 宁南县| 台江县|