2

我们的 PowerBuilder 应用程序通过将 DataWindow 打印为 PDF 文件来生成报告。现在我们想修改 PB 以生成 Excel 而不是 PDF。

在我的 PB 代码中,我尝试使用以下函数:

public function integer save_dw_to_file (datawindow adw_datawindow, string as_filename, string as_folder);
  string ls_tmp_file_xls
  ls_tmp_file_xls = as_filename+'_temp.xls'
  adw_datawindow.saveas(ls_tmp_file_xls,Excel!,true)
  return 1
end function

注意:adw_datawindow 是我要打印的DataWindow;as_filename 是输出文件名。但是,这似乎不起作用,因为打开文件时出现错误。

你知道怎么做吗?我们的环境:

PB版:PB 12经典版;Excel 版本:MS Excel 2007

4

1 回答 1

2

您的代码应该可以工作;您应该检查错误代码,因为它将包含有意义的信息。

可能是权限(文件)问题、文件争用问题、坏文件夹(无效字符)等,现有文件被锁定。先看看文件/文件夹是否存在不会有什么坏处。您可以使用 FileExists(as_filename) 检查文件,也可以通过 DirectoryExists(as_directory) 检查文件夹。

你可以试试Excel8!适用于 Excel 8 或更高版本,但我认为您的 Excel!应该可以正常工作。

// Add saveastype as parameter to function
public function integer save_dw_to_file (datawindow adw_datawindow, &
                                         string as_filename, &
                                         string as_folder, &
                                         SaveAsType sat_SaveType)

int li_rc
string ls_tmp_file
ls_tmp_file = as_filename

// add file extension based on saveastype
choose case sat_SaveType
case Excel!, Excel5!, Excel8!
   ls_tmp_file += '_temp.xls'
case PDF!
   ls_tmp_file += '_temp.pdf'
end choose

if FileExists ( ls_tmp_file ) Then  
   if MessageBox('File already exists','Would you like to replace: ' + &
       ls_tmp_file + '?', Question!, YesNo!, 2) = 2 then
      return -1
   end if
end if 

// save type based on parameter to function
li_rc = adw_datawindow.saveas(ls_tmp_file, sat_SaveType, true)
if li_rc = -1 then
    MessageBox('Error saving file','Unable to save file: ' + ls_tmp_file)
end if

return li_rc
于 2012-10-31T20:19:06.267 回答