文章分類/

Infragistics|Ultimate UI for ASP.NET|WebDataGrid:Excel 導入/導出(Excel、PDF、XPS)

159 瀏覽人次
2023-09-03 更新

infragistics log

我們收到許多有關 Excel 和用於通過 Infragistics 控件導入/導出數據的文檔 API 的問題。 因此,在這篇文章中,我想解釋一下最近發布的 WebDataGrid控件。目前,內置不支持將內容導出到 Excel、PDF 和 XPS,但這可能是將來支持的功能之一。

現在,讓我們看看如何使用 Excel API 的 load 方法從 Excel 檢索數據並在 WebDataGrid 中顯示該數據。 將數據連接到網格後,您可以使用各種功能,例如過濾、排序和編輯。如果用戶想要導出顯示的數據,可以使用相同的 API Engine 導出編輯後的數據並以 Excel、PDF 或 XPS 格式查看。

導入數據

首先,分配一個局部變量。

//Create the temporary table to store data DataTable myDataTable = new DataTable();     DataColumn myDataColumn;    DataRow myDataRow;        //MIN/MAX Values used to frame the working size of the Excel data to be imported.     int minCellRow = Int32.MaxValue;     int maxCellRow = Int32.MinValue;     int minCellColumn = Int32.MaxValue;     int maxCellColumn = Int32.MinValue;  

接下來,使用包含 NorthWind 客戶數據的 Excel 工作表,調用 Excel API 的 Load 方法來加載數據並構建數據集。

Workbook internalWorkBook = Workbook.Load(Request.PhysicalApplicationPath + "Northwind.xls");  

Load 方法加載 Excel 內容並返回 Excel 工作簿對象。 返回工作簿後,您可以搜索包含數據的工作表並構造數據對象。將此數據對象綁定到 WebDataGrid。 此示例使用數據表。首先,您可以確定數據綁定和列結構,然後相應地構建數據對象的骨架。 您可以使用工作簿對象迭代行和列,並確定要加載到 WebDataGrid 中的最小/最大工作表單元格。

foreach (Infragistics.Excel.WorksheetRow row in internalWorkBook.Worksheets["Customers"].Rows)     {        foreach (Infragistics.Excel.WorksheetCell cell in row.Cells)         {             if (cell.Value != null)            {                //Logic For Determining the Range of Rows/Columns in the Excel File.               minCellRow = Math.Min(minCellRow, cell.RowIndex);               maxCellRow = Math.Max(maxCellRow, cell.RowIndex);               minCellColumn = Math.Min(minCellColumn, cell.ColumnIndex);               maxCellColumn = Math.Max(maxCellColumn, cell.ColumnIndex);            }        }     }  

一旦收集了工作表的結構信息,您就可以在數據庫中創建行時配置 WebDataGrid 的列。 您可以在此處編輯和刪除不想導入的列或您創建的 WebDataGrid 中不想設置其屬性的列。

for (int i = minCellColumn; i <= maxCellColumn; i++)     {        //Get the column name        string columnName = internalWorkBook.Worksheets["Customers"].Rows[minCellRow].Cells[ i].Value.ToString();          //The export that was demonstrated earlier utilizes the first row       //for the column header. We can now use that to give column names.       myDataColumn = new DataColumn(columnName);          //Add the columns to the datatable.       myDataTable.Columns.Add(myDataColumn);          //Create WebDataGrid Columns and enable settings        BoundDataField bdf = new BoundDataField(true);        bdf.DataFieldName = columnName;        bdf.Key = columnName;        bdf.Header.Text = columnName;        bdf.Width = Unit.Pixel(100);        importGrid.Columns.Add(bdf); }  

最後將工作表中的數據推送到DataTable中

for (int rowIndex = minCellRow + 1; rowIndex <= maxCellRow; rowIndex++)     {        //Create a new DataRow myDataRow = myDataTable.NewRow();        //Loop through the columns and associate the value to each cell        for (int columnIndex = minCellColumn; columnIndex <= maxCellColumn; columnIndex++)        {           myDataRow[columnIndex] = internalWorkBook.Worksheets["Customers"].Rows[rowIndex].Cells[columnIndex].Value;        }               //Add The Row to a DataTable        myDataTable.Rows.Add(myDataRow);     }   

DataTable 和 WebDataGrid 列已準備就緒。接下來,綁定到 WebDataGrid。

//Set the primary key so that the WebDataGrid can perform Auto Crud     myDataTable.PrimaryKey = new DataColumn[] { myDataTable.Columns["CustomerID"] };       //ImportGrid below is the grid that we have on our page     importGrid.DataSource = myDataTable; importGrid.DataBind();   

注意:該代碼假定 XLS 文件位於服務器上,因此可以將其輸入 Excel 引擎並導入到 WebDataGrid 中。如果要擴展行為,比如在客戶端導入本地Excel文件,則需要在客戶端添加一次將文件上傳到服務器的功能。上傳到服務器後,您可以使用導入方法提取數據。

導出數據

使用API​​導出不同格式的數據的概念是相同的。首先,為文檔創建一個列結構,迭代 WebDataGrid 列並導出它們。接下來,迭代 WebDataGrid 的行以創建要導出的數據行。導出為任何格式的代碼幾乎相同,因此我將在此處使用導出為 Excel 作為示例。

首先,創建要將數據導出到的工作簿和工作表對象。創建輔助變量以進一步完成任務。

//Create workbook and worksheet object for Excel Workbook     theWorkbook = new Workbook();     Worksheet theWorkSheet = theWorkbook.Worksheets.Add("WorkSheet1");     int iRow = 1; int iCell = 1;   

下一步是迭代 WebDataGrid 列以在 Excel 工作表中創建一個列,並查找用於填充該列中的單元格的行。

//Iterate through the columns of the WebDataGrid and create     // columns within the worksheet that will be exported.     foreach(GridField gridField in this.WebDataGrid1.Columns)     {        iRow = 1;        theWorkSheet.Rows[iRow].Cells[iCell].Value = gridField.Header.Text;        theWorkSheet.Columns[iCell].Width = 5000;        iRow += 1;           //Now iterate through the grid rows to add rows to the worksheet        foreach(GridRecord gridRecord in this.WebDataGrid1.Rows)        {           theWorkSheet.Rows[iRow].Cells[iCell].Value = gridRecord.Items[iCell-1].Text;           iRow += 1;        }        iCell += 1;     }   

附加的示例包括用於在導出時格式化單元格的附加代碼。 創建工作表並導出數據後,您可以將 Excel 工作表寫入流以在客戶端上查看。

//Create the Stream class     System.IO.MemoryStream theStream = new System.IO.MemoryStream();        //Write the in memory Workbook object to the Stream     theWorkbook.Save(theStream);        //Create a Byte Array to contain the stream and send the exported sheet to the client     byte[] byteArr = (byte[])Array.CreateInstance(typeof(byte), theStream.Length);     theStream.Position = 0;     theStream.Read(byteArr, 0, (int)theStream.Length);     theStream.Close();     Response.Clear();     Response.AddHeader("content-disposition", "attachment; filename=ExportedTo.xls");     Response.BinaryWrite(byteArr);     Response.End();   

完畢!

使用上面代碼示例中我們產品中包含的 API,您可以從 Excel 導入數據並將數據導出到 Excel、PDF 或 XPS。

快速跳轉目錄

✦ 群昱 AccessSoft 你的全面軟體解決方案 ✦

身為全球眾多知名軟體在台灣合作夥伴,歡迎諮詢你需要的軟體服務!

Picture of 軟體專家
軟體專家

群昱作為全球知名軟體推薦合作夥伴,致力於提供更多軟體解決方案給你!

更多軟體新知

立即詢價

請留下完整資訊,以便我們提供精確的服務內容給你。

詢價資訊