Member 10850253 Ответов: 1

Как загрузить файл excel в ASP.NET


Я следовал этому учебнику, но, должно быть, что-то пропустил, потому что я не могу загрузить файл excel в папку моего проекта, которая действует как локальный сервер.
https://www.youtube.com/watch?v=fP6RLBWf894

Пожалуйста, дайте мне знать, что я могу сделать, чтобы исправить эту проблему.
Я не получаю никаких ошибок, но файл не будет отображаться в сетке, и он не загружается в папку.
Мне также нужно иметь возможность выбирать среди всех листов в рабочей книге, а не просто открывать первый лист.
Спасибо.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.Configuration;
using System.IO;
using System.Data;

namespace Interfaz
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string filePath = ConfigurationManager.AppSettings["FilePath"].ToString();
            string filename = string.Empty;
            if (FileUpload1.HasFile)
            {
                try
                {
                    string[] allowFile = {".xls",".xlsx" };
                    string FileExt = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
                    bool isValidFile = allowFile.Contains(FileExt);
                    if (!isValidFile)
                    {
                        lblMsg.ForeColor = System.Drawing.Color.Red;
                        lblMsg.Text = "Porfavor solo suba archivos de Excel";
                    }
                    else
                    {
                        //Upload only less or equal to 1 mb
                        /*int FileSize = FileUpload1.PostedFile.ContentLength;
                        if (FileSize<=1048576)
                        {

                        }*/
                        filename = Path.GetFileName(Server.MapPath(FileUpload1.FileName));
                        FileUpload1.SaveAs(Server.MapPath(filePath) + filename);
                        OleDbConnection con = null;
                        if (FileExt==".xls")
                        {
                            grid.Visible = true;
                            con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filePath+";Extended Properties=Excel 8.0;");
                        }
                        if (FileExt == ".xlsx")
                        {
                            grid.Visible = true;
                            con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;");
                        }
                        con.Open();
                        DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
                        String[] sheetNames = new String[dt.Rows.Count];
                        /*int i = 0;
                        foreach (DataRow row in dt.Rows)
                        {
                            cb.Items.Add(row["TABLE_NAME"].ToString());
                            i++;
                        }*/
                        OleDbCommand ExcelCommand = new OleDbCommand(@"SELECT * FROM ["+sheetNames+@"]",con);
                        OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand);
                        DataSet ExcelDataSet = new DataSet();
                        con.Close();
                        grid.DataSource = ExcelDataSet;
                        grid.DataBind();
                    }
                }
                catch (Exception ex) { }
            }
        }
    }
}

CHill60

"Пожалуйста, дайте мне знать, что я могу сделать, чтобы исправить эту проблему." ... научитесь отлаживать

Karthik_Mahalingam

вы получаете какую-нибудь ошибку ?
добавьте приведенный ниже код

 catch (Exception ex) { throw ex; } 

F-ES Sitecore

У нас нет доступа к html-разметке, файлу, который вы используете для загрузки, или конфигурации. Код выглядит нормально, но он зависит от многих вещей, к которым у нас нет доступа. Как и выше, научитесь отлаживать свой код. Шагните через него, чтобы увидеть, что происходит строка за строкой, и избавиться от блока catch. Если код выдает ошибку, вы не будете знать, что это такое.

Sinisa Hajnal

1. Поместите что - то в блок catch-так, как вы это сделали, вы просто проглатываете исключение, и именно поэтому вы не получаете ошибку. Было бы лучше не иметь try catch, чем иметь пустой блок catch
2. окончательно используйте и утилизируйте любые соединения, транзакции и другие расходные материалы.
3. научитесь использовать точки останова и отладку

Laxmidhar tatwa technologies

Сначала сохраните файл на сервере с помощью server.mappath

во-вторых, проверьте, является ли водитель зарегистрированы или не oldb

1 Ответов

Рейтинг:
2

DerekT-P

Вау, это старый вопрос. Единственное, что я хотел бы знать, это то, что у вас есть внутри. ConfigurationManager.AppSettings["FilePath"] - Ты что-то делаешь? Server.MapPath(...) чтобы сохранить файл (с исходным именем файла и расширением), но в строке подключения вы просто используете (относительный?) значение пути к файлу. Это *может* сработать, но, вероятно, не будет зависеть от вашего AppSettings значение (драйвер OLEDB нуждается в полном абсолютном пути). Но что еще более важно, драйверу нужно имя файла, а не только папка, и вы не даете ему этого - поэтому открытое соединение завершится неудачей, возникнет исключение, и поскольку вы не справитесь с ним, вы ничего не узнаете. Прочитайте и выполните действия с комментариями от ноября, используйте правильный путь и файл в строке подключения, а затем пройдите через него и посмотрите, что происходит, если проблема все еще существует. Да, и подумайте, нужно ли вам это делать. FileUpload1.PostedFile.FileName или FileUpload.FileName - тогда используйте его последовательно! (Или еще лучше просто сохраните его в локальной переменной для повышения производительности).