我有我要提取的水晶报表(使用C#),并想导出到Excel。我设法拉出并导出报告就好了。但是在代码中,我手动指定了导出目录。
代码:
myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, "C:\\Temp\\ReportName.xls");
我知道路径必须是字符串值。我该如何问用户要将报告导出到何处(并为其命名),而不是手动在代码中指定路径?
我尝试将“ SaveFileDialog”与下面的代码一起使用,然后出现以下异常:“ 其他信息:不支持给定路径的格式。”。尽管我注意到未设置“文件名”框正下方的文件类型,并且没有任何类型可供选择,但这允许用户指定文件名。
SaveFileDialog browser = new SaveFileDialog();
string directoryPath = "";
ienter code here`f (browser.ShowDialog() == DialogResult.OK)
{
directoryPath = browser.ToString(); // prints path
}
myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, directoryPath);
如果我使用“ FolderBrowserDialog”,则会收到错误:“ 其他信息:拒绝访问路径'C:\ Directory'。”,我怀疑这是由于仅提供了一个目录路径,但没有文件名。
FolderBrowserDialog browser = new FolderBrowserDialog();
string directoryPath = "";
if (browser.ShowDialog() == DialogResult.OK)
{
directoryPath = browser.SelectedPath; // prints path
}
myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, directoryPath);
如果我尝试以下操作,则不会出错,也不会保存任何文件:
FolderBrowserDialog browser = new FolderBrowserDialog();
string directoryPath = "";
string FileName = "ExcelExport.xls";
string Path = directoryPath + FileName;
if (browser.ShowDialog() == DialogResult.OK)
{
directoryPath = browser.SelectedPath; // prints path
}
myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, Path);
此外,如何导出到.xlsx而不是.xls?我可以将路径中的扩展名指定为.xlsx,但是它不想打开。需要删除X才能使其正常工作。
答案 0 :(得分:0)
我最终得到了这段代码,以正确获取路径,因为路径是通过“ System.Windows.Forms.SaveFileDialog:Title:,FileName:C:\ Temp \ test.xls” ,而不是使用所有对话框的“ C:\ Temp \ test.xls” 。
def get_scores(score,totalscore,checknumber):
loops = 0
for loops in range(0,6):
checknumber = validatescore(checknumber)
score[loops]=float(checknumber)
maxi = find_max(score)
mini = find_min(score)
totalscore = totalscore + calculate_score(score,totalscore,maxi,mini)
return score[loops],totalscore,checknumber
def find_min(score):
min = 100
for counter in range (0,len(score)):
if score[counter] < min:
mini = score[counter]
return mini
def find_max(score):
max = 100
for counter in range (0,6):
if score[counter] < max:
maxi = score[counter]
return maxi
def calculate_score(score,totalscore,maxi,mini):
for loops in range(0,6):
totalscore = totalscore + score[loops]
totalscore = totalscore - maxi - mini
return totalscore,maxi,mini
def displaydetails (totalscore,maxi,mini):
print("The competitor scored: ",totalscore, "The max was :",maxi," The min was :",mini)
def validatescore(checknumber):
valid = False
checknumber = 0
print("Please enter the score of the competitor")
checknumber = float(input())
while valid == False:
if checknumber < 0.0 or checknumber > 6.0:
print("Invalid mark - please enter a whole number between 0.0 and 6.0")
checknumber = float(input())
else:
valid = True
return checknumber
totalscore = 0.0
score = [0.0] * 6
checknumber = 0.0
score,totalscore,checknumber = get_scores(score,totalscore,checknumber)
displaydetails(totalscore,maxi,mini)
然后,您可以使用以下几行之一来写入文件,具体取决于您选择使用哪种方式导出报告:
SaveFileDialog browser = new SaveFileDialog();
string directoryPath = "";
if (browser.ShowDialog() == DialogResult.OK)
{
directoryPath = browser.FileName.ToString();
}