Jak otworzyć plik Excel w C#?

Próbuję przekonwertować jakiś VBA kod do C#. Jestem nowy w C#. Obecnie próbuję otworzyć plik Excela z folderu, a jeśli nie istnieje, utwórz go. Próbuję czegoś takiego. Jak mogę to zrobić?

Excel.Application objexcel;
Excel.Workbook wbexcel;
bool wbexists;
Excel.Worksheet objsht;
Excel.Range objrange;

objexcel = new Excel.Application();
if (Directory("C:\\csharp\\error report1.xls") = "")
{
    wbexcel.NewSheet();
}

else
{
    wbexcel.Open("C:\\csharp\\error report1.xls");
    objsht = ("sheet1");
}
objsht.Activate();
Author: abatishchev, 2009-01-21

12 answers

Musisz mieć zainstalowane narzędzia Microsoft Visual Studio dla pakietu Office.

Następnie utwórz wspólny projekt. NET i dodaj odniesienie do obiektu COM Microsoft.Office.Interop.Excel.dll poprzez 'Add Reference..'dialog.

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(path);

Missing.Value jest specjalną strukturą refleksyjną dla niepotrzebnej wymiany parametrów

 67
Author: abatishchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 20:36:44
FileInfo fi = new FileInfo("C:\\test\\report.xlsx");
if(fi.Exists)
{
    System.Diagnostics.Process.Start(@"C:\test\report.xlsx");
}
else
{
    //file doesn't exist
}
 31
Author: Mennano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-04 18:39:32
private void btnChoose2_Click(object sender, EventArgs e)
{
  OpenFileDialog openfileDialog1 = new OpenFileDialog();
  if (openfileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    this.btnChoose2.Text = openfileDialog1.FileName;
    String filename = DialogResult.ToString();

    var excelApp = new Excel.Application();
    excelApp.Visible = true;
    excelApp.Workbooks.Open(btnChoose2.Text);
  }
}
 7
Author: Flane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-28 18:04:13

Otwórz plik Excel

System.Diagnostics.Process.Start(@"c:\document.xls");
 7
Author: user3167575,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-17 13:49:25

Powinieneś otworzyć w ten sposób

        Excel.Application xlApp ;
        Excel.Workbook xlWorkBook ;
        Excel.Worksheet xlWorkSheet ;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

Źródło: http://csharp.net-informations.com/excel/csharp-open-excel.htm

Ruden

 3
Author: rudenaggar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-17 06:23:41

IMPORT

 using Excel= Microsoft.Office.Interop.Excel;
 using Microsoft.VisualStudio.Tools.Applications.Runtime;

Oto kod do otwarcia arkusza Excela za pomocą C#.

    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Workbook wbv = excel.Workbooks.Open("C:\\YourExcelSheet.xlsx");
    Microsoft.Office.Interop.Excel.Worksheet wx = excel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

    wbv.Close(true, Type.Missing, Type.Missing);
    excel.Quit();

Oto film o tym, jak otworzyć arkusz excel za pomocą C # https://www.youtube.com/watch?v=O5Dnv0tfGv4

 3
Author: user1848210,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-20 03:04:09

Aby otworzyć plik, spróbuj tego:

objexcel.Workbooks.Open(@"C:\YourPath\YourExcelFile.xls",
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing,missing, missing);

Musisz DOSTARCZYĆ te głupie, wyglądające "brakujące" argumenty. Jeśli piszesz ten sam kod w VB.Net nie potrzebowałbyś ich, ale nie możesz ich uniknąć w C#.

 2
Author: Frederick The Fool,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 11:39:27

Łatwiej jest Ci pomóc, jeśli powiesz, co jest nie tak, lub co zawiedzie, gdy go uruchomisz.

Ale od razu pomyliłeś kilka rzeczy.

Poniższe nie działa z powodu kilku problemów.

if (Directory("C:\\csharp\\error report1.xls") = "")

Próbujesz utworzyć nowy obiekt katalogu, który powinien wskazywać na plik, a następnie sprawdzić, czy nie było żadnych błędów.

To, co robisz, to próba wywołania funkcji o nazwie Directory (), a następnie przypisania łańcucha do wynik. To nie zadziała, ponieważ 1 / nie masz funkcji o nazwie Katalog (string str) i nie możesz przypisać do wyniku z funkcji (możesz przypisać tylko wartość do zmiennej).

Co powinieneś zrobić (przynajmniej dla tej linii) jest następujące

FileInfo fi = new FileInfo("C:\\csharp\\error report1.xls");
if(!fi.Exists)
{
    // Create the xl file here
}
else
{
    // Open file here
}

Aby dowiedzieć się, dlaczego kod Excela nie działa, musisz sprawdzić dokumentację Biblioteki Excela, którą google powinno być w stanie dostarczyć.

 2
Author: Mats Fredriksson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 14:57:21
Microsoft.Office.Interop.Excel.Application excapp;

excapp = new Microsoft.Office.Interop.Excel.Application();

object misval=System.Reflection.Missing.Value;

Workbook wrkbuk = new Workbook();

Worksheet wrksht = new Worksheet();

wrkbuk = excapp.Workbooks._Open(@"C:\Users\...\..._template_v1.0.xlsx", misval, misval, 
misval, misval, misval, misval, misval, misval, misval, misval, misval, misval);

wrksht = (Microsoft.Office.Interop.Excel.Worksheet)wrkbuk.Worksheets.get_Item(2);
 2
Author: Jairaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-12 04:41:46

Czy jest to aplikacja komercyjna czy jakieś oprogramowanie hobbystyczne / open source?

Pytam o to, ponieważ z mojego doświadczenia, wszystkie darmowe alternatywy obsługi. NET Excel mają poważne problemy, z różnych powodów. Dla hobbystów Zwykle kończę na portowaniu jExcelApi z Javy do C# i używaniu go.

Ale jeśli jest to aplikacja komercyjna, lepiej byłoby kupić bibliotekę innej firmy, jak Aspose.Komórki . Uwierz mi, to całkowicie worths to, jak to oszczędza dużo czasu i czasu nie jest za darmo.

 1
Author: Tamas Czinege,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 15:29:42

Kod:

 private void button1_Click(object sender, EventArgs e)
     {

        textBox1.Enabled=false;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Excell File |*.xlsx;*,xlsx";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string extn = Path.GetExtension(ofd.FileName);
                if (extn.Equals(".xls") || extn.Equals(".xlsx"))
                {
                    filename = ofd.FileName;

                    if (filename != "")
                    {
                        try
                        {
                            string excelfilename = Path.GetFileName(filename);


                        }
                        catch (Exception ew)
                        {
                            MessageBox.Show("Errror:" + ew.ToString());
                        }
                    }
                }
            }
 1
Author: Gaurav Bari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-12 07:53:34

Do edycji plików Excel z poziomu aplikacji C#, ostatnio zacząłem używać NPOI. Jestem z niego bardzo zadowolony.

 1
Author: bvgheluwe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-12 12:15:02