2014-10-30 6 views
2

난 그냥 엑셀 파일을 업로드하고 그것에 대한 처리를하려고합니다. 단계별로 진행 상황을 보여주고 싶습니다. 저는 백그라운드 작업자와 웹 메소드 등을 사용한 실제 진행 상황을 보여주기 위해 많은 노력을 기울였습니다. 그러나 이제는 JavaScript와 AJAX의 도움으로이 작업을 수행하려고합니다. 내가 BackgroundWorker에 함께 시도했습니다ActiveXObject를 사용하지 않고 javascript에서 Excel 파일을 읽는 방법은 무엇입니까?

코드는 다음과

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

클라이언트 컴퓨터에서 자바 스크립트를 사용하여 Excel 파일을 읽을 수 없습니다. –

+0

잘 작동하지만 100 %의 루프를 사용하여 마침내 표시되는 것처럼 작업 완료율의 단계별 비율을 원합니다. 완료) 상태와 사용자는 '완료'를 볼 수 있습니다. 그러나 나는 1 % 다음 2 %처럼하고 싶어 ... 100 % 다음 완료! –

+0

변경 될 때마다 진행률 표시 줄을 다시로드해야합니다. –

답변

0

나는 이것이 아약스로 끝내기가 정말 어렵다고 생각한다. 아약스가 사이트를 호출하여 진행 상황을 업데이트하면 페이지의 다른 인스턴스와 BackgroundWorker의 또 다른 인스턴스가 생성됩니다. Ajax를 사용하려면 데이터를 보관할 페이지의 "위"에 뭔가가 필요합니다. 어쩌면 세션? 당신은 ASP.NET SignalR로 무엇을 할 수

:

당신은 당신의 문제를 해결하는 데 도움이 될 http://signalr.net/ 살펴해야합니까? SignalR은 종류의 "실시간"웹 기능을 ASP.NET 응용 프로그램에 추가하는 데 사용할 수 있습니다. 예를 들어 채팅이 자주 사용되지만 훨씬 더 많은 작업을 수행 할 수 있습니다. 사용자가 새 데이터를보기 위해 웹 페이지를 새로 고치거나 페이지가 Ajax long 폴링을 구현하여 새 데이터를 검색 할 때마다 SignalR을 사용하는 의 후보가됩니다.

관련 문제