2014-10-30 78 views
2

我只是想上传一个excel文件并对其进行一些处理。 并希望逐步显示进度。 我已经尝试了很多,以显示我已经使用Background-worker和Web方法等的真实进度,但现在没有成功,我正在考虑在JavaScript和AJAX的帮助下做到这一点。如何在不使用ActiveXObject的情况下读取javascript中的excel文件?

代码中,我与BackgroundWorker的尝试低于

Imports System.ComponentModel 
Imports System.Threading 

Public Class _Default 
    Inherits Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 

    End Sub 

    Dim bw As BackgroundWorker = New BackgroundWorker 
    Public Shared stopWorker As Boolean = False 

    Public Function startWorker() As Int16 
     If Not bw.IsBusy = True Then 
      bw.RunWorkerAsync() 
     End If 
     Return 0 
    End Function 

    Public Function testww(sender As Object, e As EventArgs) As Int16 
     bw.WorkerSupportsCancellation = True 
     bw.WorkerReportsProgress = True 
     AddHandler bw.DoWork, AddressOf bw_DoWork 
     AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged 
     AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted 
     Return 0 
    End Function 

    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) 
     Dim worker As BackgroundWorker = CType(sender, BackgroundWorker) 

     For i = 1 To 500 
      If bw.CancellationPending = True Then 
       e.Cancel = True 
       Exit For 
      Else 
       ' Perform a time consuming operation and report progress. 
       System.Threading.Thread.Sleep(500) 
       bw.ReportProgress(i * 0.5) 
      End If 
     Next 
    End Sub 

    Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) 
     Me.tbProgress.Text = e.ProgressPercentage.ToString() & "%" 
    End Sub 


    Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) 
     If e.Cancelled = True Then 
      Me.tbProgress.Text = "Canceled!" 
     ElseIf e.Error IsNot Nothing Then 
      Me.tbProgress.Text = "Error: " & e.Error.Message 
     Else 
      Me.tbProgress.Text = "Done!" 
     End If 
    End Sub 

    Private Shared Sub WorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) 

     Dim worker As BackgroundWorker = TryCast(sender, BackgroundWorker) 
     If worker IsNot Nothing Then 
      System.Threading.Thread.Sleep(3000) 
      If Not stopWorker Then 
       worker.RunWorkerAsync() 
      Else 
       While stopWorker 
        Thread.Sleep(6000) 
       End While 
       worker.RunWorkerAsync() 
      End If 
     End If 
    End Sub 

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     bw.WorkerSupportsCancellation = True 
     bw.WorkerReportsProgress = True 
     AddHandler bw.DoWork, AddressOf bw_DoWork 
     AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged 
     AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted 
     Dim result = startWorker() 
    End Sub 
End Class 

和前端,我只是累改变文本框的值一样

<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" Async="true" CodeBehind="Default.aspx.vb" Inherits="WebApplication2._Default" %> 

<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent"> 
</asp:Content> 
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent"> 
    <asp:TextBox ID="tbProgress" runat="server"></asp:TextBox> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 
</asp:Content> 

enter image description here

请帮帮我。

+0

它是不可能在客户端PC使用Javascript – 2014-10-30 12:12:39

+0

它工作正常,但我想一步完成任务的步骤百分比,它显示在最后,当它以100%的出来从循环读取Excel文件(完成!)状态和用户只能看到“完成!”但我想要1%然后2%然后继续...... 100%然后完成! – 2014-10-30 12:12:46

+0

每当有任何更改时,您需要重新加载进度栏 – 2014-10-30 12:18:13

回答

0

我认为用ajax很难做到这一点。当ajax调用站点来更新进度时,您将获得页面的另一个实例以及另一个BackgroundWorker实例。如果你想使用Ajax,你将需要页面上方的东西来保存数据。也许会议?

你应该看看http://signalr.net/这可能会帮助您解决您的问题:

你可以用ASP.NET SignalR做什么? SignalR可用于将任何类型的“实时”Web功能添加到您的ASP.NET应用程序中。 虽然聊天常被用作示例,但您可以做更多事情。 任何时候用户刷新网页以查看新数据,或页面实现Ajax长轮询以检索新数据,都可以使用SignalR进行 。

相关问题