데이터베이스 테이블에서 Excel 파일을 생성하는 데 EPPLUS를 사용하지만 전체 SSIS 프로세스가 중지 될 때까지 작성된 파일은 읽기 전용 모드로 유지됩니다. 난 후 나중에 그 과정에서 파일을 이동해야하고 이것은 항상 SSIS에서 다음 메시지와 함께 실패합니다EPPLUS를 사용하여 데이터베이스 테이블에서 Excel 파일을 생성 할 때 파일은 항상 읽기 전용입니다.
[File System Task] Error: An error occurred with the following error message: "The process cannot access the file because it is being used by another process.".
나는 내가 "파일 사용 중"
있어 Excel에서 파일을 열려고 나는이 문제를 다루 심하지 않는 내가 4.1로 업데이트 할 계획 EPPLUS 4.0.5하지만 릴리스 노트를 사용하고public void Main()
{
try
{
String FilePath = Dts.Variables["$Package::DestinationFileName"].Value.ToString();
String TableName = Dts.Variables["$Package::SourceTableName"].Value.ToString();
String ConnStr = Dts.Variables["$Project::ConnStr_DataWarehouse"].Value.ToString();
//SqlConnection Conn = (SqlConnection)(Dts.Connections["DW"].AcquireConnection(Dts.Transaction) as SqlConnection);
using (SqlConnection Conn = new SqlConnection(ConnStr))
{
String Sql = "SELECT * FROM " + TableName;
if (File.Exists(FilePath))
{
try { File.Delete(FilePath); }
catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); Dts.TaskResult = (int)ScriptResults.Failure; }
}
using (DataTable dt = new DataTable())
{
using (SqlCommand cmd = new SqlCommand(Sql, Conn))
{
Conn.Open();
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
FileInfo newFile = new FileInfo(FilePath);
using (ExcelPackage p = new ExcelPackage(newFile))
{
using (ExcelWorksheet ws = p.Workbook.Worksheets.Add("RejectetionReport"))
{
ws.Cells["A1"].LoadFromDataTable(dt, true);
p.Save();
}
}
}
Conn.Close();
}
}
}
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
:
book1.xlsx is locked for editing by 'another user'. Open 'Read-Only' or click 'Notify' to open read-only and receive notification when the document is no longer in use. I hope you'll be able to help me.
여기 내 코드입니다.
편집 : 4.1로 업그레이드했지만 여전히 문제가 있습니다.
이것은 오랫동안보고 된 문제와 관련이있는 것으로 보입니다. https://epplus.codeplex.com/workitem/14919 – Kilren
코드를보고 epplus 설명서가 필요한 것을 수행하고 있지만 어쩌면 epplus와 같은 것처럼 보입니다. {} 블록이 객체를 제대로 처리하지 못하는 버그가 있습니다. 당신은 자신을 처분하고 사용을 제거하려고 할 수 있습니다 .... – Matt
분명히 이미 모든 일회용 물체를 수동으로 처분하려했습니다. 객체를 null로 설정하려고 시도합니다 ... – Kilren