質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • C#

    9489questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Excel

    2036questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • ClosedXML

    20questions

ClosedXML Excelのパスが通らない

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,944

lable

score 10

 前提・実現したいこと

CLosedXMLを使ってExcelを開きたいのですが、パスが通らず開くことができません。何が足りないのかご教示願います。

 発生している問題・エラーメッセージ

System.FormatException: '入力文字列の形式が正しくありません。'

 該当のソースコード

var path = @"\Users\******\source\repos\testapp\testapp\bin\Debug\****.xlsx";
// Excelファイルを読み込み
using (var book = new XLWorkbook(path, XLEventTracking.Disabled))←ここでエラーが起こります。
{
var sheet = book.Worksheet("しーと");
sheet.Cell("A1").Value = "Value";
book.Save();
}

 試したこと

var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "****.xlsx");

var path = Path.GetFullPath("..\\****.xlsx");

Uri u1 = new Uri("C:\\Users\\***\\Desktop\\");
Uri u2 = new Uri(u1, "..\\****.xlsx");
var path = u2.LocalPath;

調べて出てきたこれらのコードは試しました。
しかしいずれもエラーを出しました。

追記
@"\Users\**\source\repos\testapp\testapp\bin\Debug\**.xlsx";   ここの部分を @"C:\Users\****\source\repos\testapp\testapp\bin\Debug\**.xlsx"; と変えると System.IO.DirectoryNotFoundException: 'パス 'c:\users\****\source\repos\testapp\testapp\bin\Debug\Users\**\source\repos\testapp\testapp\bin\Debug\****.xlsx' の一部が見つかりませんでした。'
とエラーが出ます。

追記
var path = @"*****.xlsx";
String filename = path;
if (File.Exists(filename))
{
MessageBox.Show("存在する");
}
else
{
MessageBox.Show("存在しない");
}
このコードを実行したところ”存在する”が表示されました。
なのでやはりコード以外の場所で問題があるかもしれません。

追記
OpenXMLでも試した結果
var filename = @"C:\Users\****\source\repos\testapp\testapp\bin\Debug\****.xlsx";
using (SpreadsheetDocument document = SpreadsheetDocument.Open(filename, false))
{
MessageBox.Show("開いた");
}
これで実行したところ実行結果は”開いた”が表示されました。

追記
Excelを新規作成し、空のまま保存したものをClosedXMLで開こうとしたら開くことができた。

 補足情報(FW/ツールのバージョンなど)

VisualStudio 2017
ClosedXML 0.93.1
Excel for Ofiice 365 MSO (16.0.10730.20053) 32ビット

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mituha

    2018/08/27 17:34

    このような場合、まず、File.Exists等でファイルがあることをコード上で確認できるようにし、追記されたほうが良いかと思います

    キャンセル

  • lable

    2018/08/27 17:56

    なるほどそのようなやり方もあるのですね。勉強になります。追記しておきます。結果は存在するとのことでした。

    キャンセル

回答 4

checkベストアンサー

+1

  • ファイルが存在している
  • papinianusさんの環境では動作している

となった場合、lableさんの環境依存の問題の可能性が高くなります。  
まずは処理しようとしている xlsx が正しいかを検証するべきです。  

質問で触れられていませんが、このxlsxファイルはどのようにして作成されてものでしょうか?

  • EXCEL(バージョンは?)で正常に開けることを確認する
  • 別なxlsxファイルに差し替えた場合に動作するかを確認する

等が考えられます。  
ClosedXmlの該当部分はOpenXmlをそのままラップしているようなので、
OpenXml付属ツール(検証ツールがあったはず)等で開けるかを確認するのも良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/28 09:06

    ありがとうございます。
    今コードはこれ以外に記述しておらず、別のディレクトリを参照するような内容は含まれていないはずです。
    今確認したのですが、OpenXMLでは開くことができました。追記しておきます。

    キャンセル

  • 2018/08/28 09:14

    空のExcel を試したところ、進展が見られました。
    処理が進みシートのところまで処理が通りました。
    ということは初めに通そうとしていたExcelに問題がありそうですね。

    キャンセル

  • 2018/08/28 09:32

    解決することができました!
    拡張子があっているのか確認したところ、確かにxlsxではあったのですが
    (Strict Open XMLスプレッドシート)というものになっていました。
    なので改めて、(Excel ブック)に直して保存したところ上手く通りました。
    本当にありがとうございます。

    キャンセル

+1

var path = @"\Users\**\source\repos\testapp\testapp\bin\Debug\****.xlsx";

全角のスペースが紛れこんでます
また、OSはなんでしょうか。
Windowsにすればパスの形式が違いますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/27 15:32

    そのパスが見つからない、というエラーです。
    きちんと存在してるのか確認しましょう

    キャンセル

  • 2018/08/27 15:36

    そのフォルダの中にはちゃんと****.xlsxのファイルは存在していますが、二重になっているのが気になり、”\\****.xlsx”でも試してみたのですが、今度は
    System.IO.FileNotFoundException: 'ファイル 'c:\****.xlsx' が見つかりませんでした。
    と出てきます。

    キャンセル

  • 2018/08/27 15:36

    コード以外に問題があるのでしょうか?

    キャンセル

+1

ClosedXMLを今、動作検証しましたが、windowsで、絶対パスも相対パスも認識してくれました。

別回答のコメント欄でお気付きのとおり、パスが二重化していることに問題があるのだと思います。
そのようなことはコードでしか起こらないと思います(コードの外に問題はない)。

本当に質問分のとおり、書いてあって、追記のとおりの修正をしたのなら、そういう動作にはならないと思います。+ +=が使われていないかご確認ください。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ClosedXML.Excel;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = @"book.xlsx";
            //var path = @"C:\..デスクトップ..\ConsoleApp1\ConsoleApp1\bin\Debug\book.xlsx";
            // Excelファイルを読み込み
            using (var book = new XLWorkbook(path, XLEventTracking.Disabled))
            {
                var sheet = book.Worksheet("しーと");
                sheet.Cell("A1").Value = "Value";
                book.Save();
            }
        }
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/27 16:23

    追記するのもはずかしいくらい、ご提示のままなんですが、いちおう

    キャンセル

  • 2018/08/27 16:31

    恐縮です。ありがとうございます。
    まるまるコピーして要所だけ変更したのですが、やはりエラーになります。

    キャンセル

  • 2018/08/27 16:32

    VisualStudioのバージョンを一度替えてやってみます。

    キャンセル

0

自己解決ではありませんが、解決までの過程を記入しておきます。
ベストアンサーの方の返事にも書いたのですが、
自分が最初に実行していたExcelファイルは拡張子が.xlsxとなっていてなんの問題も無いように思われたのですが、実は
Strict Open XMLスプレッドシート(.xlsx)というものでした。なぜこの様な拡張子になったのかは不明です。(自分でやったのかもしれない)
そこで、
Excel ブック(.xlsx)という拡張子に変えて保存すると、ClosedXMLで開くことができました。

この解決は
mituhaさん、y_waiwaiさん、papinianusさん、のおかげでございます。
本当にありがとうございました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9489questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Excel

    2036questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • ClosedXML

    20questions