
The method is very simple.
• The application will choose the Excel file using the File Input element.
• Send the Excel file to my Web API controller function using AngularJS $http service.
• The Web API function will identify the file, extract data from the Excel sheet, and load it to a DataTable.
• The API will return the DataTable to the requesting AngularJS service. Finally, the data will be bound to the UI-Grid.
You can do tons of operations using the UI-Grid in AngularJS. Here are few examples in UI-Grid that I am sure will be useful for web developers.
1) How to Implement Filtering in AngularJS UI-Grid
2) How to Make UI-Grid Editable
3) Implementing Pagination to AngularJS UI-Grid
4) Create a Data Grid in AngularJS using UI-Grid and Asp.Net Web API MVC 4
I have a list of birds in my Excel sheet, which I want to read and show in my AngularJS.
ID Name Type Scientific_Name 001 Eurasian Collared-Dove Dove Streptopelia 002 Bald Eagle Hawk Haliaeetus leucocephalus 003 Cooper's Hawk Hawk Accipiter cooperii 004 Bell's Sparrow Sparrow Artemisiospiza belli 005 Mourning Dove Dove Zenaida macroura
My Web API has a Controller, with a function named UploadFiles(). The function returns a DataTable object to the requesting app.
using System;
using System.Net.http;
using System.Web.http;
using System.IO;
using System.Data;
using System.Data.OleDb;
namespace FileUpload
{
public class FileUploadController : ApiController
{
[HttpPost()]
public DataTable UploadFiles()
{
// DEFINE THE PATH WHERE WE WANT TO SAVE THE FILES.
string sPath = "";
sPath = System.Web.Hosting.HostingEnvironment.MapPath("~/locker/");
System.Web.HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files;
// THE DataTable TO HOLD EXCEL DATA.
DataTable dt = new DataTable();
// CHECK THE FILE COUNT.
System.Web.HttpPostedFile hpf = hfc[0];
if (hpf.ContentLength > 0)
{
if (hpf.FileName.EndsWith("xlsx")) // CHECK THE FILE TYPE (YOU CAN CHECK WITH .xls ALSO).
{
// SAVE THE FILES IN THE FOLDER.
hpf.SaveAs(sPath + Path.GetFileName(hpf.FileName));
// SET A CONNECTION TO THE EXCEL FILE.
OleDbConnection myExcelConn = new OleDbConnection
("Provider=Microsoft.ACE.OLEDB.12.0; " +
"Data Source=" + sPath + Path.GetFileName(hpf.FileName) +
";Extended Properties=Excel 12.0;");
try
{
myExcelConn.Open();
// GET DATA FROM EXCEL SHEET.
OleDbCommand objOleDB =
new OleDbCommand("SELECT *FROM [Sheet1$]", myExcelConn);
// READ THE DATA EXTRACTED FROM THE EXCEL FILE.
OleDbDataReader objBulkReader = null;
objBulkReader = objOleDB.ExecuteReader();
dt.Load(objBulkReader); // LOAD DATATABLE WITH DATA.
}
catch (Exception ex)
{
//
}
finally
{
myExcelConn.Close(); myExcelConn = null; // CLEAR.
}
}
}
return dt; // RETURN DataTable TO THE CALLING APP.
}
}
}
Option Explicit On
Imports System.Net.http
Imports System.Web.http
Imports System.IO
Imports System.Data.OleDb
Namespace FileUpload
Public Class FileUploadController
Inherits ApiController
<HttpPost()> _
Public Function UploadFiles() As DataTable
' DEFINE THE PATH WHERE WE WANT TO SAVE THE FILES.
Dim sPath As String = ""
sPath = System.Web.Hosting.HostingEnvironment.MapPath("~/locker/")
Dim hfc As System.Web.HttpFileCollection = System.Web.HttpContext.Current.Request.Files
Dim dt As DataTable = New DataTable ' THE DataTable TO HOLD EXCEL DATA.
Dim hpf As HttpPostedFile = hfc(0)
If hpf.ContentLength > 0 Then
' CHECK THE FILE TYPE (YOU CAN CHECK WITH .xls ALSO).
If hpf.FileName.EndsWith(".xlsx") Then
' SAVE THE FILES IN THE FOLDER.
hpf.SaveAs(sPath & Path.GetFileName(hpf.FileName))
' SET A CONNECTION TO THE EXCEL FILE.
Dim myExcelConn As OleDbConnection = _
New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
sPath & "\" & Path.GetFileName(hpf.FileName) & _
";Extended Properties=Excel 12.0;")
Try
myExcelConn.Open()
' GET DATA FROM EXCEL SHEET.
Dim objOleDB As New OleDbCommand("SELECT *FROM [Sheet1$]", myExcelConn)
' READ THE DATA EXTRACTED FROM THE EXCEL FILE.
Dim objBulkReader As OleDbDataReader
objBulkReader = objOleDB.ExecuteReader
dt.Load(objBulkReader) // LOAD DATATABLE WITH DATA.
Catch ex As Exception
'
Finally
myExcelConn.Close() : myExcelConn = Nothing ' CLEAR.
End Try
End If
End If
Return dt ' RETURN DataTable TO THE CALLING APP.
End Function
End Class
End Namespace
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
<script src="https://ui-grid.info/release/ui-grid.js"></script>
<link rel="stylesheet" href="https://ui-grid.info/release/ui-grid.css" type="text/css">
<style>
.uiGrd {
width: 550px;
height: 300px;
}
</style>
</head>
<body>
<div ng-app="myApp"
ng-controller="myController">
<input type="file" id="file1" name="file" ng-files="getTheFiles($files)" />
<input type="button" ng-click="uploadFiles()" value="Upload" />
<div class="uiGrd" id="grd" ui-grid="gridData"></div>
</div>
</body>
<script>
angular.module('myApp', ['ui.grid'])
.directive('ngFiles', ['$parse', function ($parse) {
function fn_link(scope, element, attrs) {
var onChange = $parse(attrs.ngFiles);
element.on('change', function (event) {
onChange(scope, { $files: event.target.files });
});
};
return {
link: fn_link
}
} ])
.controller('myController', function ($scope, $http) {
var formdata = new FormData();
$scope.getTheFiles = function ($files) {
angular.forEach($files, function (value, key) {
formdata.append(key, value);
});
};
// Send files to the API using POST method.
$scope.uploadFiles = function () {
var request = {
method: 'POST',
url: '/api/fileupload/',
data: formdata,
headers: {
'Content-Type': undefined
},
transformRequest: angular.identity
};
$scope.arr = new Array;
// Send the files.
$http(request)
.success(function (data) {
var i = 0; // JUST A COUNTER.
// LOOP THROUGH EACH DATA.
angular.forEach(data, function () {
var b = {
ID: data[i].ID,
BirdName: data[i].Name,
Type: data[i].Type,
Scientific_Name: data[i].Scientific_Name
};
$scope.arr.push(b); // ADD DATA TO THE ARRAY.
i += 1;
});
})
.error(function () { });
}
$scope.gridData = { data: 'arr' }; // BIND ARRAY (WITH DATA) TO THE GRID.
});
</script>I am using AngularJS $http service to post data to the Web API. Once the API successfully processes the request, it will return a list of data (rows). We’ll loop through each row using AngularJS .forEach() method and push the data in an Array.
