读取 OpenOffice 电子表格时出错

Posted

技术标签:

【中文标题】读取 OpenOffice 电子表格时出错【英文标题】:Error while reading OpenOffice spreadsheet 【发布时间】:2016-06-27 07:58:02 【问题描述】:

在我的应用程序中,我必须阅读 OpenOffice 电子表格并在下面的网格视图中显示电子表格中的数据是我使用的代码,但它提供了一个异常,即外部表的格式不正确我该如何解决这个问题

 <div>
        Import Excel File:  
        <asp:FileUpload ID="FileUpload1" runat="server" />  
        <br />  
        <br />  
        <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="Upload" />  
        <br />  
        <br />  
        <asp:Label ID="Label1" runat="server"></asp:Label>  
        <br />  
        <asp:GridView ID="gvExcelFile" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">  
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />  
            <EditRowStyle BackColor="#999999" />  
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />  
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />  
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />  
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />  
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />  
            <SortedAscendingCellStyle BackColor="#E9E7E2" />  
            <SortedAscendingHeaderStyle BackColor="#506C8C" />  
            <SortedDescendingCellStyle BackColor="#FFFDF8" />  
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />  
        </asp:GridView>  

    </div>  

 //Coneection String by default empty  
            string ConStr = "";
            //Extantion of the file upload control saving into ext because   
            //there are two types of extation .xls and .xlsx of Excel   
            string ext = Path.GetExtension(FileUpload1.FileName).ToLower();
            //getting the path of the file   
            string path = Server.MapPath("~/MyFolder/" + FileUpload1.FileName);
            //saving the file inside the MyFolder of the server  
            FileUpload1.SaveAs(path);
            Label1.Text = FileUpload1.FileName + "\'s Data showing into the GridView";
            //checking that extantion is .xls or .xlsx  
            if (ext.Trim() == ".ods")
            
                //connection string for that file which extantion is .xls  
                ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
            
            else if (ext.Trim() == ".xlsx")
            
                //connection string for that file which extantion is .xlsx  
                ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            
            //making query  
            string query = "SELECT * FROM [Sheet1$]";
            //Providing connection  
            OleDbConnection conn = new OleDbConnection(ConStr);
            //checking that connection state is closed or not if closed the   
            //open the connection  
            if (conn.State == ConnectionState.Closed)
            
                conn.Open();
            
            //create command object  
            OleDbCommand cmd = new OleDbCommand(query, conn);
            // create a data adapter and get the data into dataadapter  
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            //fill the Excel data to data set  
            da.Fill(ds);
            //set data source of the grid view  
            gvExcelFile.DataSource = ds.Tables[0];
            //binding the gridview  
            gvExcelFile.DataBind();
            //close the connection  
            conn.Close(); 

【问题讨论】:

你用的是什么浏览器?此外,在代码中它说“Excel”,但我认为它应该说 OpenOffice Calc。我编辑了问题,但没有更改代码,因为这在 *** 上是不受欢迎的。 我的办公室我们只安装了开放式办公室在我们的系统中现在我应该阅读开放式办公室电子表格中的内容并在gridview中显示它你能帮我吗我尝试了很多但无法做到这是非常迫切的需求 嗯,这是一项紧急需求这一事实与 *** 无关——我们只是志愿者。无论如何,您使用的是什么浏览器?另外请编辑问题并将代码更改为“OpenOffice”或“Calc”而不是“Excel”。 我也通过启用它来授予不安全运行的权限,但我仍然没有得到输出 【参考方案1】:

ActiveXObject 仅适用于 Internet Explorer,如 here 所述。

对于其他浏览器,Silverlight 有AutomationFactory 可能能够做到这一点。但是,由于涉及安全风险,我没有尝试。

另一种方法是将ReadExcel() 函数放在以.js 结尾的文件中,然后在文件末尾添加ReadExcel(); 行。将excelFile 设置为电子表格文件的路径。我双击运行它,然后它成功加载了OpenOffice文档。

编辑

看看下面这行是不是同样的错误:

var objShell = new ActiveXObject("WScript.shell");

如果是这样,那么问题与 OpenOffice 或您的代码无关。也许您需要授予 Internet Explorer 不安全运行的权限。见https://social.technet.microsoft.com/Forums/ie/en-US/8db7ec28-45ca-4859-b051-f0571a4da14e/error-automation-server-cant-create-object?forum=ieitpropriorver。

【讨论】:

如果它对您有用,那么您能否修改我的代码,如果 ms office 和 open office 都安装在同一台电脑上,如果只在 pc 上安装了 open office,那么它会显示异常该自动化服务器无法创建对象 你能帮我解决在gridview中显示开放办公室电子表格数据的迫切要求 我也通过启用它来授予不安全运行的权限,但我仍然没有得到输出 是的,换行后我也遇到了同样的错误

以上是关于读取 OpenOffice 电子表格时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 应用程序中读取 OpenOffice 文档电子表格?

如何阅读 Open Office 电子表格?

在 OpenOffice 电子表格文件上写入多个工作表

OpenOffice 电子表格监听器

Python按单元格读取复杂电子表格(Excel)数据实践

Python按单元格读取复杂电子表格(Excel)数据实践