私のC#アプリケーションでは、OLEDB接続文字列「Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=\"Excel 8.0;HDR=NO;ReadOnly=true;IMEX=1\"
」を使用してExcelファイルを読み取ります。 パスワードで保護されたファイルを読み取るために、接続文字列にパスワードフィールドを追加しようとしましたが、ファイルを読み取れませんでした。 パスワードを事前に知っていれば、パスワードで保護されたExcelファイルを読み取る方法はありますか?C#でOLEDBを使用してパスワード保護されたExcelファイルを読み取る
答えて
ここにはOLEDBを含むdifferent ways to connect to an Excel fileがあります。これによると、標準的な方法でパスワードで保護されたファイルを開くことはできません。回避策を使用する必要があります。
Excelワークブックが パスワードで保護されている場合、あなたもあなたの接続文字列を使用して 正しいパスワードを供給することにより、 データアクセスのためにそれを開くことができません。 C#ではないとはいえ、 復号化ファイルではありませんでした」
This is the solutionをしていますが、簡単に自分の目的のためにそれを適応させることができ
あなたはドン場合」:。あなたがしようとすると、 次のエラーメッセージが表示されます。トンパスワードを自分で知っているが、代替は、パスワードなしでファイルを再作成することですあなたはthis handy projectを使用して、それに次のルーチンを追加することができます。。
public void SaveFile()
{
this.excelWorkbook.SaveAs(
this.excelWorkbook.FullName,
vk_format,
"",
vk_write_res_password,
vk_read_only,
null,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
null,
vk_add_to_mru,
null,null,vk_local);
}
OoXmlCrypto streamを使用すると、Office 2007で暗号化されたファイルにアクセスできます。オープンソース、変更されたExcelPackageを含む
サンプルコード:
using (OfficeCryptoStream stream = OfficeCryptoStream.Open("a.xlsx", "password"))
{
// Do stuff (e.g. create System.IO.Packaging.Package or
// ExcelPackage from the stream, make changes and save)
// Change the password (optional)
stream.Password = "newPassword";
// Encrypt and save the file
stream.Save();
}
は、Excelファイルを読むためにクエリを使用する場合は、シートの一部が保護されている場合、それは問題ではない:それはどちらかのように動作します。
private string ExcelConnection(string fileName)
{
return
@"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" + fileName + ";" +
@"Extended Properties=" + Convert.ToChar(34).ToString() +
@"Excel 8.0" + Convert.ToChar(34).ToString() + ";";
}
private DataTable readExcel(string fileName, string sql)
{
OleDbConnection conn = new OleDbConnection(ExcelConnection(fileName));
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter adp = new OleDbDataAdapter();
adp.SelectCommand = cmd;
DataTable dt = new DataTable();
try
{
adp.FillSchema(dt, SchemaType.Source);
adp.Fill(dt);
}
catch
{
}
return dt;
}
私は何度も何度も調査した後、最終的に私は2つのことを発見しました。
1. OLEDBを使用すると、パスワードで保護されたExcelファイルを読み取ることができません。
2. Interopはパスワード保護されているかどうかに関わらずExcelファイルを読み取ることはできますが、その性能はOLEDBほど良くありません。
だから、私は非常に素晴らしいパフォーマンスと、すべてのファイルを読むことができる優れ
2.相互運用機能を持ってい
1. OLEDBを組み合わせることにより、コードの下に作成します。
public DataTable ReadPasswordProtectedExcel(string ExcelFilePath, string Password)
{
String TempExcelFilePath = string.Empty;
DataTable _DataTable = new DataTable();
#region Get ExcelFile and Remove Password
{
String TempExcelFileName = string.Empty;
String DirectoryPath = string.Empty;
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
excelapp.Visible = false;
Microsoft.Office.Interop.Excel.Workbook newWorkbook = excelapp.Workbooks.Open(ExcelFilePath, 0,
true, 5, Password, "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true,
false, 0, true, false, false);
TempExcelFileName = string.Format("{0}_{1}", "__", Path.GetFileName(ExcelFilePath)); // __xxx.xlsx
TempExcelFilePath = String.Format("{0}/{1}", Path.GetDirectoryName(ExcelFilePath), TempExcelFileName);
/// Create new excel file and remove password.
newWorkbook.SaveAs(TempExcelFilePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, "", "",
false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
newWorkbook.Close(true, "", false);
excelapp.Quit();
Marshal.ReleaseComObject(excelapp);
}
#endregion
#region Get data from excel file by using OLEDB
{
_DataTable = ReadExcelFileInOLEDB(TempExcelFilePath);
///Delete excel file
File.Delete(TempExcelFilePath);
}
#endregion
return _DataTable;
}
public DataTable ReadExcelFileInOLEDB(string _ExcelFilePath)
{
string ConnectionString = string.Empty;
string SheetName = string.Empty;
DataTable _DataTable = null;
DataSet _DataSet = null;
try
{
ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=0;'", _ExcelFilePath);
using (OleDbConnection _OleDbConnection = new OleDbConnection(ConnectionString))
{
_OleDbConnection.Open();
_DataTable = _OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (_DataTable == null)
return null;
SheetName = _DataTable.Rows[0]["TABLE_NAME"].ToString();
ConnectionString = string.Format("SELECT * FROM [{0}]", SheetName);
using (OleDbCommand _OleDbCommand = new OleDbCommand(ConnectionString, _OleDbConnection))
{
using (OleDbDataAdapter _OleDbDataAdapter = new OleDbDataAdapter())
{
_OleDbDataAdapter.SelectCommand = _OleDbCommand;
_DataSet = new DataSet();
_OleDbDataAdapter.Fill(_DataSet, "PrintInfo");
return _DataSet.Tables["PrintInfo"];
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
は、Excelからデータを取得中に空の行を削除したい場合は最後に、this linkをチェックして、コード
SELECT * FROM NAMED_RANGE WHERE [YourColumnTitle] IS NOT NULL
- 1. CでOLEDBを使用せずにパスワードで保護されたExcelファイルを読み取る#
- 2. パスワードで保護されたExcelファイルをPythonで使用
- 3. パスワードで保護されたExcelワークシートからデータを読み取る方法
- 4. Excelのパスワードで保護されたシート
- 5. 読み取り専用保護でExcelファイルを開くには?
- 6. C#でOLEDBを使用してxlsxファイルを読み取れません
- 7. Powershell:パスワードで保護されたパスワードで保護された.zipファイル(プロセスのスピードアップ)
- 8. libxlsを使用してCでExcelファイルを読み取る
- 9. パスワードで保護されたシートでExcelを読む。ワークブックのパスワードを保存しなくても、もはや
- 10. Entity Frameworkコアを使用してパスワードで保護されたSQLite
- 11. Excelを読み取るOLEDBのパフォーマンス
- 12. ルビーのパスワードで保護され暗号化されたファイルの読み取り/書き込み
- 13. パスワードでPDFファイルを保護するC#
- 14. OLEDBを使用してExcelを読み込み、一部のセルが正しく読み取られない
- 15. パスワードで保護されたExcelをAccessに接続する
- 16. Javaで圧縮されたExcelファイルをパスワードで保護する方法は?
- 17. パスワードで保護されたファイルを保存するマクロ
- 18. パスワード保護されたファイルのアップロード
- 19. パスワードで保護されたExcelスプレッドシートをUiPathで開く
- 20. ActionScript - PHPを使用してパスワードで保護されたディレクトリ(.htaccess)から資産を読み込む
- 21. Oledbを使用してExcelファイルを読む - Excelファイルの内容をテキストのみで処理する
- 22. Pythonで7zipを使用して、指定されたパスにパスワードで保護されたファイルを作成する
- 23. DotNetZipを使用してパスワードで保護されたZipファイルを復号するC#
- 24. powershellでパスワード保護されたExcelを開きます。
- 25. JavaScriptでパスワード保護されたExcelブックを開く
- 26. 要求とHTTPBasicAuthを使用してパスワードで保護されたサイトからzipファイルを取得する
- 27. パスワードで保護されたファイルをuwpで抽出します
- 28. パスワードで保護されたpdfsを使用してレールを作成する
- 29. 更新されたパスワードで保護されたC#のリンクワードドキュメント
- 30. node.jsでパスワードで保護されたZIPファイルを生成する
PWD =パスワード以下くださいあなたは試してみましたか? – Havenard