web-dev-qa-db-ja.com

C#でExcelファイルを開く方法は?

VBA コードをC#に変換しようとしています。私はC#が初めてです。現在、フォルダからExcelファイルを開こうとしていますが、存在しない場合は作成します。私は次のようなものを試しています。どうすればそれを機能させることができますか?

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();
60
tksy

Microsoft Visual Studio Tools for Office(VSTO)をインストールする必要があります。

VSTOは、Visual Studioインストーラーの[ワークロード]> [Webとクラウド]> [Office/SharePoint開発]で選択できます。

その後、共通の.NETプロジェクトを作成し、「参照の追加...」>「アセンブリ」ダイアログを介してMicrosoft.Office.Interop.Excelへの参照を追加します。

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

Missing.Valueは、不必要なパラメーター置換のための特別なリフレクション構造体です


新しいバージョンでは、必要なアセンブリ参照はMicrosoft Excel 16.0 Object Libraryと呼ばれます。最新バージョンがインストールされていない場合、Microsoft Excel 15.0 Object Library、または古いバージョンがインストールされている可能性がありますが、これは含めるプロセスと同じです。

enter image description here

74
abatishchev
FileInfo fi = new FileInfo("C:\\test\\report.xlsx");
if(fi.Exists)
{
    System.Diagnostics.Process.Start(@"C:\test\report.xlsx");
}
else
{
    //file doesn't exist
}
37
Mennano
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);
  }
}
8
Flane

excelファイルを開く

System.Diagnostics.Process.Start(@"c:\document.xls");
8
user3167575

輸入品

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

C#を使用してExcelシートを開くコードを次に示します。

    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();

C# https://www.youtube.com/watch?v=O5Dnv0tfGv4 を使用してExcelワークシートを開く方法についてのビデオメイトを次に示します。

3
user1848210

このように開く必要があります

        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);

ソース: http://csharp.net-informations.com/Excel/csharp-open-Excel.htm

ルーデン

3
rudenaggar

ファイルを開くには、これを試してください:

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

これらの愚かな見た目の「欠落」引数を提供する必要があります。 VB.Netで同じコードを記述している場合、それらは必要ありませんが、C#でそれらを回避することはできません。

2

何が間違っているのか、それを実行したときに何が失敗したのかを言うと、あなたを助けるのは簡単です。

しかし、一目見ただけでは、いくつかの混乱が生じています。

以下はいくつかの問題のため機能しません。

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

あなたがやろうとしているのは、ファイルを指す新しいディレクトリオブジェクトを作成し、エラーがあったかどうかを確認することです。

実際に実行しているのは、Directory()という名前の関数を呼び出して、結果に文字列を割り当てることです。 1/Directory(string str)という名前の関数がなく、関数の結果に割り当てることができないため、これは機能しません(変数に値を割り当てることしかできません)。

(少なくともこの行では)あなたがすべきことは次のとおりです。

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

Excelコードが機能しない理由については、Googleが提供できるExcelライブラリのドキュメントを確認する必要があります。

2
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
Jairaj

これは商用アプリケーションですか、それとも趣味の人/オープンソースソフトウェアですか?

私の経験では、すべての無料の.NET Excel処理の代替案はさまざまな理由で深刻な問題があるため、これを求めています。趣味の場合は、通常jExcelApiをJavaからC#に移植して使用します。

ただし、これが商用アプリケーションである場合は、 Aspose.Cells のようなサードパーティライブラリを購入することをお勧めします。信じてください。多くの時間と時間を節約できるので、それは完全に価値があります。

1
Tamas Czinege

コード:

 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
Gaurav Bari

C#アプリケーション内からExcelファイルを編集するために、最近 NPOI の使用を開始しました。とても満足しています。

1
bvgheluwe