【问题标题】:how to read excel file in javascript without using ActiveXObject?如何在不使用 ActiveXObject 的情况下在 javascript 中读取 excel 文件?
【发布时间】:2014-12-26 11:03:41
【问题描述】:

我只是想上传一个 excel 文件并对其进行一些处理。 并想一步一步地显示进度。 我已经尝试了很多来展示我使用后台工作者和 Web 方法等的真正进展,但现在没有成功我正在考虑在 JavaScript 和 AJAX 的帮助下做到这一点。

我用 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>

请帮帮我。

【问题讨论】:

  • 无法在客户端电脑上使用 Javascript 读取 excel 文件
  • 它工作正常,但我希望逐步完成任务的百分比,因为它最终从 for 循环中以 100%(完成!)状态显示出来,用户只能看到“完毕!”但我想要 1% 然后 2% 并继续... 100% 然后完成!
  • 每次有任何变化都需要重新加载进度条

标签: javascript ajax vb.net


【解决方案1】:

我认为用 ajax 完成这件事真的很难。当 ajax 调用站点更新进度时,您将获得页面的另一个实例以及 BackgroundWorker 的另一个实例。如果您想使用 Ajax,您将需要在页面“上方”的东西来保存数据。也许是一个会话?

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

您可以使用 ASP.NET SignalR 做什么? SignalR 可用于添加任何 为您的 ASP.NET 应用程序提供某种“实时”Web 功能。 虽然聊天经常被用作示例,但您可以做更多的事情。 每当用户刷新网页以查看新数据或页面时 实现 Ajax 长轮询以检索新数据,是 使用 SignalR。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多